gpt4 book ai didi

sql-server - 当我使用 BeginExecuteNonQuery 时,我的输出参数始终为空

转载 作者:行者123 更新时间:2023-12-04 06:52:44 25 4
gpt4 key购买 nike

我有一个存储过程,它返回一个 varchar(160) 作为存储过程的输出参数。

当我使用 ExecuteNonQuery 时一切正常,我总是能取回预期值。

但是,一旦我切换到使用 BeginExecuteNonQuery,我会得到一个空值作为输出。

我正在使用 connString +“异步处理=true;”在这两种情况下。

可悲的是,在我的情况下,BeginExecuteNonQuery 大约快 1.5 倍......但我真的需要输出参数。

谢谢!

编辑:这就是我处理 BeginExecuteNonQuery 回调的方式(我正在使用.net 4.0 ...)

    Dim resp as String=""
cmd.BeginExecuteNonQuery(Sub(result As IAsyncResult)
Dim c As SqlCommand = Nothing
Try
c = CType(result.AsyncState, SqlCommand)
c.EndExecuteNonQuery(result)
**resp = CStr(c.Parameters("@response").Value)**
Catch ex As Exception
WriteLog("ERR - LogRequest - " & ex.Message)
Finally
c.Connection.Close()
c.Dispose()
End Try
End Sub, cmd)

最佳答案

当您使用 BeginExecuteNonQuery查询在后台运行,您的代码继续运行。可能发生的情况是您在查询完成执行之前查看结果。这是来自 BeginExecuteNonQuery 的 msdn 帮助:

IAsyncResult result = command.BeginExecuteNonQuery();
while (!result.IsCompleted)
{
Console.WriteLine("Waiting ({0})", count++);
// Wait for 1/10 second, so the counter
// does not consume all available resources
// on the main thread.
System.Threading.Thread.Sleep(100);
}
Console.WriteLine("Command complete. Affected {0} rows.",
command.EndExecuteNonQuery(result));

所以结果只有一次正确可用 IsCompleted是真的。

请注意,这只是文档中的一个示例,异步函数的真正用途是允许您的应用程序的其余部分(例如您的 UI)在运行长查询时继续运行。

关于sql-server - 当我使用 BeginExecuteNonQuery 时,我的输出参数始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2887570/

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