cMi*_*nor 5 c# c++ dll sql-server-2008
假设我有简单的C#代码打印HELLO WORLD如在这里
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");
}
}
Run Code Online (Sandbox Code Playgroud)
所以他们在那页说:
本主题概述了使用Microsoft SQL Server与Microsoft .NET Framework公共语言运行时(CLR)集成来编译数据库对象所需的命名空间和库.该主题还向您展示了如何编写,编译和运行用Microsoft Visual C#编写的简单CLR存储过程.
CLR集成功能在名为system.data.dll的程序集中公开,该程序集是.NET Framework的一部分.可以在全局程序集缓存(GAC)以及.NET Framework目录中找到此程序集.通常由命令行工具和Microsoft Visual Studio自动添加对此程序集的引用,因此无需手动添加它.
在创建(编译它并添加到路径dll)之后,您可以将该代码用作存储过程,如:
CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE
Run Code Online (Sandbox Code Playgroud)
一旦创建了程序集,我们现在可以使用create procedure语句访问我们的HelloWorld方法.我们将调用我们的存储过程"hello":
CREATE PROCEDURE hello
AS
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld
Run Code Online (Sandbox Code Playgroud)
一旦创建了该过程,就可以像在Transact-SQL中编写的普通存储过程一样运行它.执行以下命令:
EXEC hello
Run Code Online (Sandbox Code Playgroud)
删除该proc:
drop procedure hello
Run Code Online (Sandbox Code Playgroud)
删除该过程后,您可以删除包含示例代码的程序集.
drop assembly helloworld
Run Code Online (Sandbox Code Playgroud)
介绍之后:
我需要使用也使用extern dll的C++代码,我的问题如下,
我怎么能在C#中使用我的C++代码(也使用extern dll),例如,在我执行存储过程的那一刻创建程序集之后,以下是transparant:
所以我只做
EXEC你好
以及所有发生的事情(SQL SERVER - > C# - > C++ - > extern dll).
我在考虑
[DllImport("cCode.dll")]
Run Code Online (Sandbox Code Playgroud)
但如果c ++代码依赖于extern dll ...我迷路了
好吧,如果你要走这条路,你可能会跳过使用C#作为C++ dll的包装器(因为听起来你只是想尝试使用SQL Server CLR集成作为调用C++例程).
相反,您可以在服务器上创建并注册C++ COM +应用程序(示例),并使用sp_OACreate和相关过程从SQL Server调用它.仅供参考:如果需要,您也可以在C#中创建COM +应用程序,但与C++ DLL进行交互可能需要更多工作.
我认为您可以更好地使用此方法,因为COM +应用程序可以配置为在专用服务器进程中运行,而不是在SQL Server进程中运行.
也许你的情况另有说明,但正如其他人评论的那样,最好将这种"集成"留在数据库之外并将其放入一个单独的应用层.