我有以下代码:

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/

10-12 22:30