gpt4 book ai didi

.net - CLR 存储过程中数据表上的 LINQ

转载 作者:行者123 更新时间:2023-12-04 08:30:13 24 4
gpt4 key购买 nike

有人知道是否可以(以及如何)在 DataTable 上使用 LINQ 在 CLR 存储过程中 ?

但是,我在标准 WinForms 项目中的 DataTable 上使用 LINQ 没有问题;我在 SQL2005 上的 VS2010 中使用数据库项目并创建存储过程:

(简化列表)

[Microsoft.SqlServer.Server.SqlProcedure]
public static void ProcessReOrder()
{
using (SqlConnection conn = new SqlConnection("context connection=true")) {
SqlDataAdapter adapter = new SqlDataAdapter("database.dbo.OtherSp", conn);
DataTable table = new DataTable("ReOrder");
adapter.Fill(table);

var query = from t in table.AsEnumerable()
where t.Field<int>("Id") > 1000 select t.Field<int>("Id");

etc.....
}

问题是的,AsEnumerable() 是一个扩展方法,虽然我已经得到了对 LINQ 的使用引用;它仍然没有找到。

搜索谷歌,让我相信这与使用隐藏在框架中的 LINQ 实体引用(DLL)有关,但是,由于这是一个数据库项目,我们无法在系统上添加对任何 DLL 的引用;添加引用框仅限于选择的几个程序集,并且没有浏览...按钮。

不管性能问题等,我不想在我的 .NET 存储过程中手动滚动很多 ADO/T-SQL;我更喜欢 LINQ 以及将代码移动到不同层/数据库平台的能力。存储过程中的 DataTable 上的 LINQ 是否受支持(我猜不是),还是我在这里完全偏离基础并且必须使用 T-SQL 进行编码?

最佳答案

我不确定这会让你一路走到那里,但是这会得到 System.Data.DataSetExtensions 安装到 SQL Server 2008 中,以便您可以从 SQL CLR 项目中引用它。请注意,我是作为 的成员登录的。系统管理员 固定服务器角色。

首先,我必须让数据库准备好加载不安全的程序集。我执行了 ALTER DATABASE dbname SET TRUSTWORTHY ON;然后我使用 ALTER AUTHORIZATION ON database::dbname TO sa; 将数据库的所有者设置为 sa .

接下来,我通过将文件从 C:\Windows\assembly\GAC_MSIL\System.Data.DataSetExtensions\3.5.0.0 复制到一个保存目录(比如 c:\temp),从我工作站上的 GAC 中提取了该程序集的 v3.5 __b77a5c561934e089。

然后我可以使用语句 CREATE ASSEMBLY [System.Data.DataSetExtensions] FROM 'C:\temp\System.Data.DataSetExtensions.dll' WITH PERMISSION_SET = UNSAFE; 安装程序集.

当语句完成时,您将收到此友好提醒:警告:Microsoft .NET Framework 程序集“system.data.datasetextensions, version=3.5.0.0,culture=neutral, publickeytoken=b77a5c561934e089, processorarchitecture=msil”。您正在注册的未在 SQL Server 托管环境中进行全面测试,因此不受支持。将来,如果您升级或维护此程序集或 .NET Framework,您的 CLR 集成例程可能会停止工作。有关详细信息,请参阅 SQL Server 联机丛书。

此时,我可以引用 System.Data.DataSetExtensions 在我的 SQL CLR 项目中,我确认了 AsEnumerable()出现在 DataTable 实例上。

关于.net - CLR 存储过程中数据表上的 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3183559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com