我有一些代码:
private static void Delete(int PaxID)
{
using (SqlConnection conn = DataHelper.GetDBConnection())
{
using (SqlCommand cmd = DataHelper.GetSPCommand("spDeletePax",conn))
{
cmd.Parameters.AddWithValue("@PaxID", PaxID);
cmd.ExecuteNonQuery();
}
}
}
public static void DeletePaxes(List<int> ids, string bookingRef, string user)
{
using (TransactionScope ts = new DataHelper.CreateTransactionScope())
{
foreach (var i in ids)
{
Delete(i);
}
ts.Complete();
}
}
public static SqlConnection GetDBConnection()
{
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DB"].ConnectionString);
conn.Open();
return conn;
}
public static TransactionScope CreateTransactionScope()
{
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
transactionOptions.Timeout = TransactionManager.MaximumTimeout;
return new TransactionScope(TransactionScopeOption.Required, transactionOptions);
}
直到最近才工作正常 我没有更改任何代码,只是将我的源代码控制从VSS更改为SVN,现在在VS2012(而不是2008)中打开了项目。
如果我调用 DeletePaxes(..),则第一次删除有效,但连接数据库时第二次删除
我刚刚做错了,还是2012 / .NET4 / 4.5以不同的方式处理交易?我做了一些谷歌搜索,没有任何东西(因此在这里张贴)任何人都可以告诉我可能发生的事情吗? 我只是错误地做错了吗?
DTC issetup所以不要认为它 - 并且像我说的那样工作正常,直到我改变了源代码控制.. 如果我将事务更改为默认值 - 不使用静态方法,它也会失败.. 删除交易工作正常 我正在使用该交易,因为我需要全部或全部删除工作..
感谢
答案 0 :(得分:0)
好的不要打败我,但事实证明这是VM设置的问题。 网络适配器设置为NAT,而不是桥接适配器 - 现在一切都很顺利。 猜测交易无法找到返回VM的路,因此只是坐在那里
可能只是愚蠢到忘记这一点的我,但感谢所有的回复 - 我将会对表值的参数进行一些阅读