public void Execute(string Query, params SqlParameter[] Parameters)
{
using (var Connection = new SqlConnection(Configuration.ConnectionString))
{
Connection.Open();
using (var Command = new SqlCommand(Query, Connection))
{
if (Parameters.Length > 0)
{
Command.Parameters.Clear();
Command.Parameters.AddRange(Parameters);
}
Command.ExecuteNonQuery();
}
}
}
对于不同的查询,该方法可能被调用2次或3次,但方式相同。
例如:
插入员工 插入员工证书 在另一个表上更新Employee的程度[失败可能会在这里导致。例如 ] 如果Point [3]失败,则不应执行所有已提交的命令,而必须回滚。
我知道我可以放在SqlTransaction上面并使用Commit()方法。但是如果失败了,第三点呢?我认为只有第3点会回滚,而其他1,2点不会?如何解决这个问题,我应该怎么做?
我应该使用SqlCommand[]数组吗?我该怎么办?
我只在CodeProject中找到类似的问题:
在不更改Execute方法的情况下,您可以执行此操作
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.ReadCommitted;
transactionOptions.Timeout = TransactionManager.MaximumTimeout;
using (var tran = new TransactionScope(TransactionScopeOption.Required, transactionOptions)
{
Execute("INSERT ...");
Execute("INSERT ...");
Execute("UPDATE ...");
tran.Complete();
}
在不更改Execute方法的情况下,您可以执行此操作
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.ReadCommitted;
transactionOptions.Timeout = TransactionManager.MaximumTimeout;
using (var tran = new TransactionScope(TransactionScopeOption.Required, transactionOptions)
{
Execute("INSERT ...");
Execute("INSERT ...");
Execute("UPDATE ...");
tran.Complete();
}
SqlClient将缓存在事务中登记的内部SqlConnection,并将其重新用于每次Execute调用。因此,您甚至最终会遇到本地(非分布式)事务
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。