1

我在 C# 类库中有类似工作流的应用程序的业务逻辑,但是在每个月末需要调用库中的某些进程,我认为调用此计划执行的理想机制是使用 Sql 服务器代理(最好是 sql 作业,尽管如果绝对需要,我什至愿意进入 SSIS 地狱),但问题是我如何从 sql 作业调用应用程序库的进程?

应用程序库也用于 asp.net 页面,因此它通常有一个 Web 应用程序上下文 (web.config),其中配置了输入和输出数据库

我明白步骤或多或少

1)将类库嵌入到sql server CLR程序集中,强键签名并部署它2)调用库

我不清楚的是,在部署这样的 CLR 程序集时,Web 应用程序上下文会发生什么?我该如何使用适当的 app.config 来部署 CLR?如果我需要更改连接字符串,是否必须重新部署 CLR?

我也不确定,因为 CLR 需要连接回正在调用它的数据库(出于读取和写入表的目的),但我猜人们必须格外小心,以避免自我调用之类的事情。

4

1 回答 1

1

首先,这篇文章以“使用 SSIS”结尾:-P

只要您的库包含指向 System.Web.dll 的链接,我认为您将无法在 SQL Server 中将其注册为 SQLCLR 程序集。SQLCLR 汇编非常受限制,不能包含任何引用。

您可以将业务逻辑的前端特定部分移动到单独的表示层库中。这通常比混合业务逻辑和表示类(如 Web 应用程序上下文)更好的解决方案。之后,您可以尝试将程序集部署到 SQL Server。

现在您可以创建第二个 SQLCLR 库,其中包含协调您的业务对象的 .NET 存储过程。

但是,我在这里并没有真正看到 SQLCLR 的优势。这将需要对您的源代码进行巨大的更改,并对您的整个应用程序造成一些限制。

我个人的偏好是 要么使用 SSIS 包。在这里,您可以引用任何其他 DLL 并使用其功能。或者编写一个简单的 .NET 控制台应用程序,该应用程序将由 SQL 代理启动。在这两种情况下,实现几乎相同。

SQLCLR 专门设计用于处理可能(和暗示性的)T-SQL 特性的纯粹数据库特定任务。

于 2010-07-22T18:40:19.053 回答