- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个存储过程,它写入特定数据库的备份。我在 C#/Windows 窗体应用程序中异步调用此 SP。这是代码片段:
IAsyncResult result = command.BeginExecuteNonQuery();
while (!result.IsCompleted)
{
System.Threading.Thread.Sleep(1000);
...
}
command.EndExecuteNonQuery(result));
一段时间后程序离开循环,因为 IsCompleted = true 并调用 EndExecuteNonQuery。现在的问题是,Job 仍然很忙,EndExecuteNonQuery 被阻止!这会在几分钟后导致服务器超时。似乎 IsCompleted 值不一致 IsCompleted 有什么问题?我怎样才能使我的程序识别“真实工作状态”?
最佳答案
确保您的存储过程不打印任何内容并且没有计数报告(SET NOCOUNT ON
)。异步 TDS 调用在服务器发送的第一个数据包处回调,但这个数据包可能是中间结果(如 1 row updated
)并且发生在很久很久以前实际完成。这很糟糕吗?是的。你能做些什么吗?没有。
作为旁注,仅将回调传递给 BeginExecute(...) 是否效率更高:
// Set form's state to 'executing',
// eg. Button.Enabled = false; label.Text = 'Executing';
command.BeginExecuteNonQuery((asyncstate)=>
{
try
{
command.EndExecuteNotQuery();
}
catch(SqlException ex)
{
...
}
// Reset the form's state to 'Ready'
Invoke (()=>
{
// eg. Button.Enabled = true; label.Text = 'Ready';
}
}
关于c# - SQL 服务器 2008 : BeginExecuteNonQuery/EndExecuteNonQuery Problem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3398193/
文档 here指出 developers must call the EndExecuteNonQuery method to finish the operation. 我无法找到一个很好的理由来说
我正在通过 C# 应用程序在 mysql 数据库中插入数据,我想知道插入是否成功,并在互联网上搜索我读到了有关“EndExecuteNonQuery”的内容,但它没有解释任何内容的方式应该使用它。我不
我有以下代码: using (SqlConnection sqlConnection = new SqlConnection("blahblah;Asynchronous Processing=tru
我有一个存储过程,它写入特定数据库的备份。我在 C#/Windows 窗体应用程序中异步调用此 SP。这是代码片段: IAsyncResult result = command.BeginExecut
我是一名优秀的程序员,十分优秀!