问题:
基本上,由于某种原因,更新语句会无限等待(ExecuteNonQueryAsync())。 插入工作得很好,我尝试用硬编码参数硬编码一个简单的更新语句(没有合并),相同故事,甚至尝试删除 where 子句并更新所有行,同样的问题。
将commandTimeout设置为1秒后,我设法识别出TimeoutException,为什么会发生这种情况?我不知道。
编辑:情节扭曲。 现在我有随机成功的更新,这让我更加困惑。 我基本上尝试了我能想到的所有可能的情况来识别问题中存在的任何模式,我唯一的结论是更新成功率完全是随机的......
插入仍然工作正常。
这是简化的代码部分。
public class CipCheckRepository : ICipCheckRepository
{
private string connectionString = "Data Source=****;User Id=****;PASSWORD=****;Persist Security Info=True;";
public CipCheckRepository()
{}
public async Task InsertOrUpdate(CipCheck cipCheck)
{
using (var uow = new UnitOfWork(connectionString))
{
using (var cmd = uow.CreateCommand())
{
cmd.CommandText = @"
MERGE INTO test
USING dual
ON (id = :CAD_ID)
WHEN MATCHED THEN
UPDATE SET value = :ISRA_NUMBER
WHEN NOT MATCHED THEN
INSERT
(
id,
value
)
VALUES
(
:CAD_ID,
:ISRA_NUMBER
)";
cmd.Parameters.AddWithValue("CAD_ID", 1);
cmd.Parameters.AddWithValue("ISRA_NUMBER", cipCheck.IsraNumber);
cmd.CommandTimeout = 1;
try
{
await cmd.ExecuteNonQueryAsync();
}
catch (OracleException ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
}
}
UnitOfWork类是为了抽象问题而创建的。
如何确定永无休止的查询的原因以及可以采取哪些步骤来防止它?
最佳答案
关于c# - 更新查询时 ODP .NET 语句超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58083864/