异步函数未执行sqlCLR存储过程
本文关键字:sqlCLR 存储过程 执行 函数 异步 | 更新日期: 2023-09-27 17:58:24
我有一个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) { }
}