postgresql 开始事务回滚

wb1gzix0  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(2)|浏览(191)

我只是想知道如果有多个插入和更新语句,如(insert into sales(),insert into saledetails(),update sale等)被执行,如果发生任何异常,那么将回滚所有或发生异常的行。下面是代码。

using (var conn = new NpgsqlConnection(connstr))
                        {
                            conn.Open();
                            var tra = conn.BeginTransaction();
                            try
                            {
                                NpgsqlCommand cmd = new NpgsqlCommand();
                                cmd.Connection = conn;
                                cmd.CommandType = CommandType.Text;
                                cmd.CommandTimeout = 0;
                                cmd.CommandText = strQueryBuild.ToString();
                                RowsAffected = cmd.ExecuteNonQuery();
                                tra.Commit();
                                commitstatus = true;
                            }
                            catch (Exception ex)
                            {
                                commitstatus = false;
                                AppHelper.ErrrorLog(ex, "UploadFileData-Error1");
                                RowsAffected = -1;
                                tra.Rollback();
                            }
                            
                        }

再次执行该查询后,我得到一个重复键冲突错误。

iecba09b

iecba09b1#

如示例所示,它只对执行的每个操作应用回滚。若要回滚多个操作,必须为所有操作启动单个连接和begintransaction。

blmhpbnm

blmhpbnm2#

重复键错误是因为正在执行的查询违反了“UNIQUE”键约束。
暂时,您可以通过捕获异常然后采取适当的操作来绕过重复键错误。查找特定的错误代码以捕获重复键冲突。
不是一个好的解决方案,但会暂时有帮助。

相关问题