[英]asynchronous function not executing sql CLR stored procedure
我有一个 CLR 存储过程,我想从 C# 异步执行。
代码如下:
private delegate void GeneratePayrollDelegate(string payProcessID);
public void GeneratePayroll(string payProcessID)
{
GeneratePayrollDelegate del = new GeneratePayrollDelegate(GeneratePayrollAsync);
del.BeginInvoke(payProcessID, null, null);
}
public void GeneratePayrollAsync(string payProcessID)
{
try
{
using (SqlConnection connection = new SqlConnection(DLConnectionStringHelper.GetConnectionString() + "; async=true;"))
{
using (SqlCommand cmd = new SqlCommand("proc_GeneratePayroll", connection))
{
cmd.CommandTimeout = 3600;
cmd.CommandType = CommandType.StoredProcedure;
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
}
}
}
catch (Exception ex) { _Exceptions.ManageExceptions(ex); }
}
如果从 sql 运行此存储过程,则它会成功执行。
当它从上面的代码执行时,当尝试通过作为参数发送的 ID 检索行时,它不会在 CLR 存储过程中提供任何行。
需要帮忙!
您正在调用cmd.ExecuteNonQuery()
; 您应该调用BeginExecuteReader
来获取结果,因为示例代码可以是这样的
private void Asynchronous(IAsyncResult asyncResult)
{
System.Data.SqlClient.SqlDataReader reader;
try
{
System.Data.SqlClient.SqlCommand command =
asyncResult.AsyncState as System.Data.SqlClient.SqlCommand;
reader = command.EndExecuteReader(asyncResult);
while (reader.Read())
{
}
reader.Close();
}
catch
{
}
}
public void GeneratePayrollAsync(string payProcessID)
{
try
{
using (SqlConnection connection = new SqlConnection("ConnectionString"))
{
using (SqlCommand command = new SqlCommand("proc_GeneratePayroll", connection))
{
command.CommandTimeout = 3600;
command.CommandType = CommandType.StoredProcedure;
//Set Your stored procedure parameter here
connection.Open();
command.BeginExecuteReader(Asynchronous, command, CommandBehavior.Default);
}
}
}
catch (Exception ex) { }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.