我遇到了一个非常奇怪的问题:存储过程不会返回,即使数据正确和及时插入。最令人惊讶的是,记录时间戳字段总是在毫秒内填充,因此数据似乎非常快速地进入表格。但返回从未发生。存储过程不返回控制到C#代码
所有这一切的重要部分是,它只发生在负载下 - 个人请求很好。只有当数据库足够强调时,这件事才会开始发生。
任何想法都是受欢迎的,因为我很少理解什么是错的。
这里被简化它的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
UPDATE:我们做了最好的超时和SQL服务器的活动相关,它出现非应用用户活动导致锁定。该过程旨在允许非常快速的插入和非常快速的读取。但是,有些个人会执行相当昂贵的查询,而实际上并未使用DIRTY READ策略,该策略正在打破脆弱的硬件负载平衡。感谢您的所有提示。
RETURN在哪里? –
没有任何价值的回报。通过返回,我的意思是SP永远不会返回,异常会在C#端被捕获。 – Schultz9999
你的意思是ExecuteNonQuery()挂起? –