我只是想知道如果有多个插入和更新语句,如(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();
}
}
再次执行该查询后,我得到一个重复键冲突错误。
2条答案
按热度按时间iecba09b1#
如示例所示,它只对执行的每个操作应用回滚。若要回滚多个操作,必须为所有操作启动单个连接和begintransaction。
blmhpbnm2#
重复键错误是因为正在执行的查询违反了“UNIQUE”键约束。
暂时,您可以通过捕获异常然后采取适当的操作来绕过重复键错误。查找特定的错误代码以捕获重复键冲突。
不是一个好的解决方案,但会暂时有帮助。