c# - 如何从 C# 正确执行链接服务器存储过程
问题描述
我想执行位于链接服务器数据库中的存储过程。目前,我在 SSMS 中使用它:
INSERT INTO myTable
EXEC [LINKEDSERVER\LINKED].[Data_Base_Name].[Store].usp_GetInfo 1, 1, NULL, 'H'
这会将来自存储过程的结果数据插入到我的本地数据库中LINKEDSERVER\LINKED.
我希望能够使用来自 C# 的命令来执行此操作,是否有正确的方法来执行此操作?
谢谢!
解决方案
您可以从 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();
}
推荐阅读
- php - 如果添加了更新图像和 pdf 的代码,则更新查询不起作用
- rest - Canvas - LMS - 如何获取用户提交的测验答案?
- android - 适用于 Android 的 Google 登录:当我将 Web 客户端 ID 传递给 requestIdToken 时出现 12500 错误
- javascript - 如何在javascript中同时使用输入按钮和onclick(鼠标单击)
- c++ - 在 MSVC 2017 中添加新类时找不到基类
- android - 如何从位置服务获取位置超时异常
- javascript - react native show the other component depends on the picker choice
- laravel - 在 laravel 中不使用节点
- excel - Excel VBA 电子邮件创建
- c++ - For 循环和并行数组:未声明的标识符