使用当前连接从sql存储过程调用dll函数
我可以使用开放连接从存储过程调用dll吗 我有一个从SQLServer获取数据的dll,当我从存储过程调用它时,我不想打开一个新的连接 多谢各位 这里有一个例子使用当前连接从sql存储过程调用dll函数,sql,sql-server,dll,clr,sqlconnection,Sql,Sql Server,Dll,Clr,Sqlconnection,我可以使用开放连接从存储过程调用dll吗 我有一个从SQLServer获取数据的dll,当我从存储过程调用它时,我不想打开一个新的连接 多谢各位 这里有一个例子 public class Class1 { public static SqlString GetName(SqlString str) { SqlCommand cmd = new SqlCommand(str.ToString()); cmd.CommandType = System.
public class Class1
{
public static SqlString GetName(SqlString str)
{
SqlCommand cmd = new SqlCommand(str.ToString());
cmd.CommandType = System.Data.CommandType.Text;
string name = cmd.ExecuteScalar().ToString();
return name;
}
}
这是SQL代码
CREATE FUNCTION fn_TestConnection
(
@str nvarchar(255)
)
RETURNS nvarchar(max)
AS EXTERNAL NAME TestConnection.[TestConnection.Class1].GetName
GO
SELECT dbo.fn_TestConnection('SELECT FName FROM Clients WHERE Id = 1' )
这些说明适用于Microsoft SQL Server Management Studio 2014 导入程序集 首先,您需要导航到“新建程序集”对话框窗口,将该程序集导入SQL Server Management Studio内的数据库: 数据库名称->可编程性->程序集->(右键单击)“新建程序集…” 在“新建程序集”对话框窗口中,选择
程序集路径
字段下的浏览
,然后选择要导入的程序集。调整权限并单击ok
在SQL函数中包装汇编方法
接下来,您需要创建sql函数来包装您的汇编方法,如下所示:
CREATE FUNCTION [dbo].[fn_funcName](@str [varchar](max))
RETURNS
varchar(max)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [YourSqlAssemblyName].[YourAssemblyName.Class1].[GetName]
若要从函数返回表,请阅读.NET中的SqlFunctionAttribute 这些说明适用于Microsoft SQL Server Management Studio 2014 导入程序集 首先,您需要导航到“新建程序集”对话框窗口,将该程序集导入SQL Server Management Studio内的数据库: 数据库名称->可编程性->程序集->(右键单击)“新建程序集…” 在“新建程序集”对话框窗口中,选择
程序集路径
字段下的浏览
,然后选择要导入的程序集。调整权限并单击ok
在SQL函数中包装汇编方法
接下来,您需要创建sql函数来包装您的汇编方法,如下所示:
CREATE FUNCTION [dbo].[fn_funcName](@str [varchar](max))
RETURNS
varchar(max)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [YourSqlAssemblyName].[YourAssemblyName.Class1].[GetName]
若要从函数返回表,请阅读.NET中的SqlFunctionAttribute 命名SQL函数以便知道它来自哪个程序集的约定是什么?或者有没有办法在SQL Server Management Studio中检查与给定过程关联的程序集?@MinhTran我记得没有命名约定。你必须记住这一点。但我现在确定,那是很久以前的事了。命名SQL函数的惯例是什么,这样您就知道它来自哪个程序集了?或者有没有办法在SQL Server Management Studio中检查与给定过程关联的程序集?@MinhTran我记得没有命名约定。你必须记住这一点。但我现在肯定,那是很久以前的事了。