c# - 更新查询时 ODP .NET 语句超时

标签 c# asp.net plsql odp.net

问题:

基本上,由于某种原因,更新语句会无限等待(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类是为了抽象问题而创建的。

如何确定永无休止的查询的原因以及可以采取哪些步骤来防止它?

最佳答案

似乎我一直在以某种方式锁定表,通过 Oracle Developer 提交所有语句后,怪癖就消失了。

enter image description here

关于c# - 更新查询时 ODP .NET 语句超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58083864/

相关文章:

c# - c#/VB.net Property Properties 的优点/优势是什么 - Setters 的私有(private)访问修饰符

c# - 如何在 WPF 中正确处理(希望在 XAML 中)链接资源?

asp.net - 在 T-SQL 中将多行字段连接成一列

c# - VS2013 构建不包括项目依赖项的 Nuget 依赖项的二进制文件

c# - 在 C# 中使用反射在运行时调用 ToList() 方法

asp.net - 使用 jQuery 调用 ASP.NET PageMethod/WebMethod - 返回整个页面

asp.net - SQL 存储过程无法返回值

sql - 重复分析

oracle - 如何实现基于上下文的数据库审计?

database - 过程中 PL/SQL 中的约束双重检查