0

我有一些代码:

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 所以不要认为它 - 就像我说在我更改源代码控制之前工作正常。如果我将事务更改为默认值 - 不使用静态方法,它也会失败.. 删除事务工作正常我正在使用事务,因为我需要所有或没有删除工作..

谢谢

4

1 回答 1

0

好的,不要打败我,但事实证明这是虚拟机设置的问题。网络适​​配器设置为 NAT,而不是桥接适配器 - 现在一切都很好。猜测事务无法找到返回 VM 的方式,因此只是坐在那里

可能只是我愚蠢到忘记了这一点,但无论如何感谢所有回复 - 我将阅读表值参数

于 2012-11-21T14:35:14.393 回答