【问题标题】:Call dll function from sql stored procedure using the current connection使用当前连接从 sql 存储过程调用 dll 函数
【发布时间】:2018-10-12 22:43:42
【问题描述】:

我可以使用开放连接从存储过程中调用 dll 吗?

我有一个从 SQL Server 获取数据的 dll,当我从存储过程调用它时,我不想打开新连接。

谢谢

这是一个例子

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' )

【问题讨论】:

    标签: sql sql-server dll clr sqlconnection


    【解决方案1】:

    这些说明适用于 Microsoft SQL Server Management Studio 2014

    导入程序集

    首先,您需要通过导航到“新建程序集”对话框窗口将该程序集导入 SQL Server Management Studio 中的数据库:

    DatabaseName -> Programmability -> Assemblies ->(右键单击)'New Assembly...'

    在“新建程序集”对话框窗口中,选择 Path to assembly 字段下的 Browse,然后选择要导入的程序集。调整权限,点击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 我记得没有命名约定。你必须记住它。但我现在可以肯定,那是很久以前的事了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多