Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回重复项Postgresql的错误_C#_Postgresql - Fatal编程技术网

C# 返回重复项Postgresql的错误

C# 返回重复项Postgresql的错误,c#,postgresql,C#,Postgresql,假设我在postgres中有一个表,它的主键是在c#中创建的。我正在尝试插入一个重复的密钥,如果发生此类事件,我将尝试返回一个错误。我故意插入一个重复条目来模拟错误。这种情况是,如果我有一个insert命令,但它还没有使用NPGSL事务提交,那么由于某种原因,代码会在提交部分之前暂停,另一个用户会创建一个主键,该主键会生成相同的键,因为第一个事务还没有提交,并且会顺利插入。执行提交时的第一个事务将引发异常。这是我的想法,但它不起作用 command = new NpgsqlCommand(st

假设我在postgres中有一个表,它的主键是在c#中创建的。我正在尝试插入一个重复的密钥,如果发生此类事件,我将尝试返回一个错误。我故意插入一个重复条目来模拟错误。这种情况是,如果我有一个insert命令,但它还没有使用NPGSL事务提交,那么由于某种原因,代码会在提交部分之前暂停,另一个用户会创建一个主键,该主键会生成相同的键,因为第一个事务还没有提交,并且会顺利插入。执行提交时的第一个事务将引发异常。这是我的想法,但它不起作用

 command = new NpgsqlCommand(strQuery, conn);
        if (command.ExecuteNonQuery() > 0)
            return true;
        else
           throw new Exception("Data not inserted. Create new Transaction");

此代码在运行ExecuteOnQuery时立即停止。

如果您有重复的键值,
ExecuteOnQuery
本身将抛出。无需检查返回值即可引发另一个异常。您想做什么?代码的其余部分在哪里?如果您没有得到异常,那是因为查询或其他代码有问题。它不会抛出任何错误。我的应用程序冻结了,这不能解释任何事情。冻结在哪里<代码>执行查询?这意味着没有插入-查询在等待其他事务完成时被阻止。当另一个事务完成时,此事务将继续。如果命令执行超时过期,您将得到一个exceptionAgain,您想做什么?为什么要进行多重交易?像INSERT、UPDATE、DELETE这样的单独命令都是原子的,它们不需要额外的事务。无论如何,你不应该有长时间运行的事务是的。它在执行ExecuteOnQuery时冻结。用try-catch包围它也有同样的结果。原因是我在一个事务中做多次插入,它应该是全部或者什么都不做。但问题是我所有的主键都是用c生成的。不是自动递增的。