gpt4 book ai didi

c# - 存储过程不会将控制返回给 C# 代码

转载 作者:太空宇宙 更新时间:2023-11-03 13:50:20 24 4
gpt4 key购买 nike

我遇到了一个非常奇怪的问题:即使正确及时地插入了数据,存储过程也没有返回。最令人震惊的是,记录时间戳字段总是在几毫秒内填充,因此数据似乎非常快地进入表格。但返回永远不会发生。

所有这一切的重要部分是它只在负载下发生——单独的请求就可以了。只有当 DB 承受足够大的压力时,这件事才会开始发生。

欢迎提出任何想法,因为我不太了解什么地方可能出错。

这是其中简化的 C# 部分:

try 
{
using (var conn = new SqlConnection(connString))
{
conn.Open();

using (var cmd = new SqlCommand(conn, ....)
{
cmd.CommandType = StoredProcedure;

cmd.ExecuteNonQuery();

// THIS NEVER EXECUTES:
ReportSuccess();
}
}
}
catch (TimeoutException)
{
// EXCEPTION HERE
}

存储过程:

CREATE PROCEDURE dbo.Blah
BEGIN
INSERT dbo.MyTable VALUES (...)

INSERT dbo.MyTable2...

-- Here is where everything stops.

END

更新:我们尽了最大努力将超时和 SQL 服务器事件关联起来,看起来非应用程序用户事件导致了锁定。该过程旨在允许非常快速的插入和非常快速的读取。然而,有些人会在没有实际使用 DIRTY READ 策略的情况下执行相当昂贵的查询,这会破坏脆弱的硬件负载平衡。感谢您提供的所有提示。

最佳答案

根据提供的信息,我的最佳猜测是您的存储过程中存在意外事件问题。

尝试在存储过程中使用事务。如果我的理论是正确的,则不会插入任何记录。

检查 MyTable2 上是否正在获取任何锁。如果您在其他地方对该表进行大量选择,请确保您使用的是 nolock。

关于c# - 存储过程不会将控制返回给 C# 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13867418/

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