问题标签 [sqlclr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
447 浏览

sql-server - 使用 CLR 从注册表中获取值

有没有办法使用 CLR 过程从注册表中获取值,而无需将 Microsoft.Win32 注册为 SQL Server 中的程序集?

我希望从 CLR proc 中的注册表中获取 DigitalProductId(我需要将其解码为字符串)并将其返回给 SQL。

支持的命名空间

我可以为此使用 mscorlib 中的方法吗?

编辑: 我在这里错过了什么吗?Microsoft.Win32 似乎可以在 CLR 中使用?编辑:是的,我错过了一些东西。在我可以使用 Microsoft.WIn32 之前,需要将其设置为 UNSAFE 程序集,然后对其进行签名等。

0 投票
3 回答
634 浏览

c# - SQL Server 2005 使用 C# 从流创建程序集

我可以像 MSSMS 生成的程序集脚本一样从流中创建程序集吗?我需要从放置在 SQL Server 无权访问的目录中的 DLL 创建程序集。
不过,程序集安装程序确实可以访问程序集。
所以我的问题是:我可以读取程序集并从读取的流中生成创建吗?

谢谢。

0 投票
3 回答
3361 浏览

sql-server - SQL Server 2008 CLR 与 T-SQL:效率/速度有区别吗?

我是一名 C# 开发人员,在 T-SQL 中完成了一些基本的数据库工作。但是,我需要编写一个非常复杂的存储过程,远远超出我的 T-SQL 知识。

使用 .net CLR 作为 SQL Server 2008 的一部分在 C# 中编写存储过程会导致存储过程的效率低于使用 T-SQL 编写的存储过程吗?差异(如果有的话)是否显着?为什么?

0 投票
1 回答
7833 浏览

sql-server - 如何在 SQL Server 2008 中部署 CLR 函数

我在 VS2008 中创建了一个名为“RegularExpression”的 SQL Server 项目。在该项目中,我创建了一个“Regex.cs”类,并编写了一个关于正则表达式的函数。

然后我构建解决方案。

现在我的问题是通过脚本在 SQL Server 2008 中部署此解决方案。(不仅仅是在 VS2008 中单击部署)。

我成功地使用 SQL 2008 部署了该项目的组件CREATE ASSEMBLY <AName> FROM '<path of .dll>'

但我没有得到我在 SQL 2008 函数部分的 VS2008 中编写的那个函数。

0 投票
6 回答
1393 浏览

c# - 使用 CLR 存储过程可以解决哪些好的问题?

我已经在 SQL Server 中使用 CLR 存储过程有一段时间了,但我仍然想知道使用它们的最佳情况是什么。

MSDN 提供了一些使用指南,例如繁重的字符串操作 (regex),或替换声明大量表变量和游标的 T-SQL。我很想知道 SO 用户使用 CLR 存储过程以及示例/基准测试解决了哪些问题。

例如,我发现 CLR 存储过程 + SSRS 是一种很好的方法,可以将数据操作逻辑从 SSRS 和 T-SQL 中提取出来,并将其放入更易于阅读和操作的托管代码中。

0 投票
2 回答
4949 浏览

.net - CLR 程序集不会在 64 位 SQL Server 2005 中加载

我们在安装 SQL Server 2005(32 位)时使用带有一些用户定义函数的程序集。我们使用如下脚本将其部署到生产环境:

我们从未遇到过这些功能的任何问题。现在,当我们尝试将其中一台服务器升级到 x64 时,调用任何函数时都会出错。示例堆栈跟踪:

System.Data.SqlClient.SqlException:尝试加载程序集 id 65549 时,Microsoft .NET Framework 中发生错误。服务器可能资源不足,或者程序集可能不受 PERMISSION_SET = EXTERNAL_ACCESS 或 UNSAFE 的信任。再次运行查询,或查看文档以了解如何解决程序集信任问题。有关此错误的更多信息:System.IO.FileLoadException:无法加载文件或程序集“ourfunctions,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。给定的程序集名称或代码库无效。(来自 HRESULT 的异常:0x80131047) System.IO.FileLoadException:在 System.Reflection.Assembly.nLoad(AssemblyName 文件名,字符串 codeBase,证据 assemblySecurity,Assembly locationHint,StackCrawlMark&

错误提到了权限集EXTERNAL_ACCESSANDUNSAFE而我们使用的是 level SAFE

.dll 文件是在目标平台设置为“任何 CPU”的情况下构建的,当我们尝试从文件而不是 varbinary 语法加载 dll 时,我们会得到相同的结果。我们已经尝试了http://support.microsoft.com/kb/918040中的建议

我们在 32 位机器上尝试了完全相同的程序,一切正常。它必须是 x86 和 x64 之间的差异。有任何想法吗?

解决方案:我们终于找到了解决方案。事实证明,我们的程序集确实是一个 32 位编译的程序集。在 Visual Studio 中,我们使用了目标“任何 CPU”,但在检查底层 .csproj 时,我发现了以下代码段:

所以我们的“Any CPU”目标实际上是在构建一个 x86 程序集!啊。我在 subversion 中追溯了这一行,但它在 2006 年第一次签入时已经存在。也许这是数据库项目的一些早期模板中的错误?

无论如何,谢谢你的帮助。我会接受 Russ 的回答,因为我怀疑许多遇到相同问题的人会从他的回答中得到最大的帮助。

0 投票
3 回答
9176 浏览

sql - 从 SQL Server 执行 VB.NET DLL

客观的:

我们想使用执行 HTTP 请求的 .Net 3.5 使用 VB.NET 2008 编写一个 DLL

然后,我们要从 SQL Server 2005(在触发器中)调用 DLL,并向 DLL 传递一些变量并获得返回值。

我在这个过程中的位置。

我已经创建了 DLL 'HTTPDLL.dll'

资源:

我已将 DLL 放在 SQL Server c:/Windows/System 文件夹中

我已经加载了这些程序集

HelloWorld System.Core System.XML.Linq

使用这些命令

然后我添加了扩展程序

(此时我不确定为什么或是否需要添加程序集,因为它直接引用了 Dll。)

我需要解决的问题。我现在想调用 DLL 的(扩展过程)HTTPPost 函数

我尝试过的 exec HTTPPost "Msg 17750, Level 16, State 0, Procedure HTTPPost, Line 1 无法加载 DLL HelloWorld 或其引用的 DLL 之一。原因:126(找不到指定的模块。)。 "

“消息 2812,级别 16,状态 62,第 1 行找不到存储过程 'HelloWorld.HTTPPost'。”

我需要什么:如果您可以查看我的实施,看看我是否正确设置了所有内容,并告诉我(请提供示例)如何正确调用该 DLL,向其发送变量并捕获其返回值。我将不胜感激。

我浏览了许多帖子/文章,并得到了一些让我走到这一步的点点滴滴,但没有什么是包罗万象的。

我也试过这个

(和其他此类变体)并在 sp_OAGetErrorInfo 的返回中获取此信息

“错误源描述 ODSOLE 扩展过程无效的类字符串”

也许我调用不正确,但我无法让它工作(总是返回'无效的类字符串')

预先感谢您的帮助!。

0 投票
1 回答
931 浏览

sql-server - SQL CLR 中的内存压力通知

Google 无法告诉我 SQL CLR 中是否有可用的 API 来获取内存压力通知。

它显然是使用的,因为 AppDomain 将在内存压力下被卸载,但问题是通知是否在卸载之前发送到 AppDomain,以便我可以释放一些缓存内存。

(我的 dll 已经在不安全模式下运行,所以这不是问题)

0 投票
1 回答
2195 浏览

.net - 将 SQL CLR 程序集部署到 SQL Server 2008 时出现“默认架构不存在”

我正在部署一个示例SQL CLR存储过程,它SQL CLR使用 Visual Studio 2008 和 menu 作为参数类型Project -> Deploy

但得到下一个奇怪的错误:

我该如何解决?

我的用户是这样创建的:

0 投票
3 回答
1207 浏览

sql-server - 如何重构将其参数封装到类的 T-SQL 存储过程

在我的SQL Server 2008我有一个stored procedure带有大量参数的。

它们的第一部分在每次调用中都使用,第二部分的参数很少使用。而且我无法将逻辑移动到两个不同的存储过程。

有没有办法将所有这些参数封装到 a classorstruct并将其作为存储过程参数传递?

我可以使用SQL CLR. 还有其他方法吗?