首页 > 解决方案 > 如何从 C# 正确执行链接服务器存储过程

问题描述

我想执行位于链接服务器数据库中的存储过程。目前,我在 SSMS 中使用它:

INSERT INTO myTable
    EXEC [LINKEDSERVER\LINKED].[Data_Base_Name].[Store].usp_GetInfo 1, 1, NULL, 'H'

这会将来自存储过程的结果数据插入到我的本地数据库中LINKEDSERVER\LINKED.

我希望能够使用来自 C# 的命令来执行此操作,是否有正确的方法来执行此操作?

谢谢!

标签: c#sql-server

解决方案


您可以从 DataContext 执行 SP:

using (DataContext ctx = DataContext())
{
    int result = ctx.SP_ProcedureName("1", "2", "3");
}

但首先,您必须在添加表时将其从数据库中添加到 DataContext Diagram 中,但要从“Stored Procedures”文件夹中添加。

这是更具防御性和整洁的解决方案。但如果您更喜欢使用原始命令行,请至少使用参数化查询,如下例所示:

string sqlText = "SELECT columnName FROM Test_Attachments WHERE Project_Id =@PID1 AND [Directory] = @Directory";

 SqlCommand myCommand = new SqlCommand(sqlText, SqlConnection);
 myCommand.Parameters.AddWithValue("@PID1", 12);
 myCommand.Parameters.AddwithValue("@Directory", "testPath");

这是避免 SQL 注入代码的方法。您也可以使用 finally 块进行关闭连接:

    finally
    {
        command.Connection.Close();
    }

推荐阅读