gpt4 book ai didi

c# - SQL 服务器 2008 : BeginExecuteNonQuery/EndExecuteNonQuery Problem

转载 作者:太空狗 更新时间:2023-10-29 23:35:00 24 4
gpt4 key购买 nike

我有一个存储过程,它写入特定数据库的备份。我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com