我有以下代码:
using (SqlConnection sqlConnection = new SqlConnection("blahblah;Asynchronous Processing=true;")
{
using (SqlCommand command = new SqlCommand("someProcedureName", sqlConnection))
{
sqlConnection.Open();
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@param1", param1);
command.BeginExecuteNonQuery();
}
}
我从不叫EndExecuteNonQuery。
有两个问题,第一个会因为using语句或其他原因而阻塞?其次,它会破坏任何东西吗?像泄漏或连接问题?我只想告诉sql server运行存储过程,但是我不想等待它,甚至不在乎它是否有效。那可能吗?谢谢阅读。
最佳答案
这将不起作用,因为您在查询仍在运行时关闭了连接。最好的方法是使用线程池,如下所示:
ThreadPool.QueueUserWorkItem(delegate {
using (SqlConnection sqlConnection = new SqlConnection("blahblah;Asynchronous Processing=true;") {
using (SqlCommand command = new SqlCommand("someProcedureName", sqlConnection)) {
sqlConnection.Open();
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@param1", param1);
command.ExecuteNonQuery();
}
}
});
通常,当您调用Begin_Whatever_时,通常必须调用End_Whatever_否则会浪费内存。此规则的最大异常(exception)是Control.BeginInvoke。
关于c# - 没有EndExecuteNonQuery的BeginExecuteNonQuery,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1544905/