【发布时间】:2011-06-08 12:31:43
【问题描述】:
假设我有简单的 C# 代码 来打印 HELLO WORLD,如图所示 in here
using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
public class HelloWorldProc
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void HelloWorld()
{
SqlContext.Pipe.Send("HELLO WORLD!\n");
}
}
所以他们在那个页面上说:
本主题概述了 需要的命名空间和库 使用编译数据库对象 Microsoft SQL Server 与 Microsoft .NET Framework 通用 语言运行时 (CLR)。题目也 向您展示如何编写、编译和 运行一个简单的 CLR 存储过程 用 Microsoft Visual C# 编写。
CLR 集成功能是 暴露在一个名为 system.data.dll,它是 .NET 框架。这个组件可以 在全局程序集缓存中找到 (GAC) 以及 .NET Framework 目录。对此的参考 通常会添加程序集 由两个命令行自动 工具和 Microsoft Visual Studio,所以 无需手动添加。
创建后,(编译它并添加到路径 dll 中)您可以将该代码用作存储过程,例如:
CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE
创建程序集后,我们现在可以使用 create procedure 语句访问我们的 HelloWorld 方法。我们将把我们的存储过程称为“hello”:
CREATE PROCEDURE hello
AS
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld
一旦创建了过程,就可以像使用 Transact-SQL 编写的普通存储过程一样运行它。执行以下命令:
EXEC hello
要删除该过程:
drop procedure hello
删除过程后,您可以删除包含示例代码的程序集。
drop assembly helloworld
介绍之后:
我需要使用一个也使用extern dll的C++代码,我的问题如下,
我如何在 C# 中使用我的 C++ 代码(也使用 extern dll),就像在示例中一样,所以,在我执行存储过程的那一刻创建程序集之后,以下是透明的:
- SQL 创建程序集,然后调用 dll 中的 C# 代码。
- C# 代码调用 C++ 代码(在 dll 中)
- C++ 代码调用 extern dll。
所以我只做
执行你好
以及所有发生的事情(SQL SERVER -> C# -> C++ -> extern dll)。
- 如何使所有这些 dll 方继续并共存,所以我只在 SQL Server 中执行存储过程,例如 执行你好
我在想
[DllImport("cCode.dll")]
但是如果 c++ 代码依赖于外部 dll...我迷路了
【问题讨论】:
-
你最终想要做什么?如果您需要对一组数据执行复杂的逻辑,为什么不在应用程序中对从数据库检索的一组数据执行该逻辑呢?留下数据库来存储/检索数据,把你的业务逻辑放在应用程序中。
-
这是一个重大的设计失败。仅仅因为MS做了这个功能,使用它并不是一个好主意。就像从 aspx 页面直接调用数据库一样。
-
@adymitruk:我想使用大量源代码并避免重新编码
标签: c# c++ sql-server-2008 dll