繁体   English   中英

通过C#在线程上执行具有不同输入参数的SQL Server存储过程吗?

[英]Execute a SQL Server stored procedure with different input parameter on a thread via C#?

我想执行一个在线程/并行上具有2次输入参数(例如100次)的输入参数的SP。 我添加了异步处理= True; 我的连接字符串中MultipleActiveResultSets = true,并使用以下代码执行SP

在button_Click上

// ExecuteSPList是一个列表,该列表具有包含100 ReportID的列表,并且单击按钮时,我正在创建线程100次,正在调用CallInvokeUpdate

           Parallel.ForEach(ExecuteSPList, itm =>
            {
                CallInvokeUpdate(itm.ToString());
            });

然后在CallInvoke中:

   public void CallInvokeUpdate(string str)
   {
       ExecuteSP(str, strSelectedMonthEndDate);
   }

最后是ExecuteSP方法。

   public string ExecuteSP(string ReportId)
   {
       try
       {
           string connectionString = ConfigurationManager.ConnectionStrings["DB"].ConnectionString;               

           DataSet ds = new DataSet();

           using (SqlConnection sqlConnection = new SqlConnection(connectionString))
           {
               SqlCommand cmd = new SqlCommand("UpdateExecuteSP", sqlConnection);
               sqlConnection.Open();
               cmd.CommandTimeout = 3000000;

               addParameter(cmd, "ReportId", ReportId, SqlDbType.Int);

               cmd.CommandType = CommandType.StoredProcedure;

               IAsyncResult result = cmd.BeginExecuteNonQuery();
               cmd.EndExecuteNonQuery(result);
           }
           return "OK";
       }

       catch (Exception ex)
       {
           throw;
       }
   }

   private void addParameter(SqlCommand cmd, string name, object value, SqlDbType type)
   {

       SqlParameter parameter = new SqlParameter(name, type);

       cmd.Parameters.Add(parameter);

       parameter.Value = value;
   }

我的问题是,如果对一个ReportId执行存储过程“ UpdateExecuteSP”需要5秒,那么使用这种方法也将花费100 * 5 = 500秒。

谁能建议如何减少此时间并并行运行SP 100次。 任何执行之间没有依赖关系。

有什么建议吗?

由于问题在于锁定表,因此要并行执行SP,您将需要更改SP中的隔离级别。

一种方法是这样的:

.....
FROM dbo.TableName with (nolock)
.....

请注意,这可能会导致意外行为,但是我认为,只要没有2个并行查询修改相同的行,就应该很好。 请阅读此主题以了解有关该方法的更多信息

何时与(nolock)一起使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM