在C#事务作用域中事务中止

在C#事务作用域中事务中止,c#,asp.net,transactionscope,C#,Asp.net,Transactionscope,在谷歌搜索事务范围时,我看到了很多例子。但我试着这么做,所以在我的例子中,它抛出了异常。异常显示“事务中止”。。我看到了他们可能的解决方案,它显示关闭连接。但在这里,我在最后一个模块中关闭了它。有人能帮助我解决这个问题吗 更新 上述连接问题已解决。现在ti在db.ExecuteNonQuery(cmd)中抛出异常;根据我所知,在交易完成之前,本协议不会执行 麦可德 public bool NewsType(int Id) { bool status = fals

在谷歌搜索事务范围时,我看到了很多例子。但我试着这么做,所以在我的例子中,它抛出了异常。异常显示“事务中止”。。我看到了他们可能的解决方案,它显示关闭连接。但在这里,我在最后一个模块中关闭了它。有人能帮助我解决这个问题吗

更新 上述连接问题已解决。现在ti在db.ExecuteNonQuery(cmd)中抛出异常;根据我所知,在交易完成之前,本协议不会执行

麦可德

  public bool NewsType(int Id)
    {

          bool status = false;
          DatabaseProviderFactory factory = new DatabaseProviderFactory();
          Database db = factory.Create("NewsCon");
          con.Open(); 

        using (TransactionScope transactionScope = new TransactionScope())
        {
            try
            {



                String query = @"DELETE FROM NewsType WHERE ID =: ID";
                cmd = db.GetSqlStringCommand(query);
                db.AddInParameter(cmd, "ID", DbType.Int32, Id);
                db.ExecuteNonQuery(cmd); //<-- Now it shows from the error here.But i think inside transaction scope this doesn't execute until transaction has completed.

                //Second step goes here

                status = true;

                transactionScope.Complete();
                transactionScope.Dispose();

            }

            catch (Exception ex)
            {

                 throw;
            }
            finally
            {
                con.Close();
            }

            return status;
        }

    }
public bool新闻类型(int-Id)
{
布尔状态=假;
DatabaseProviderFactory=新的DatabaseProviderFactory();
数据库db=factory.Create(“NewsCon”);
con.Open();
使用(TransactionScope TransactionScope=new TransactionScope())
{
尝试
{
字符串查询=@“从新闻类型中删除,其中ID=:ID”;
cmd=db.GetSqlStringCommand(查询);
db.AddInParameter(cmd,“ID”,DbType.Int32,ID);

db.ExecuteNonQuery(cmd);//您似乎没有在任何地方使用
con
。我可以想象您的数据库工厂正在创建自己的连接。另外,我猜您需要在启动事务之前打开一个连接。@Rob请参阅编辑的帖子。
据我所知,在thrasaction完成之前,不会执行此操作。
-这是错误的。SQL肯定会立即执行。事务只是没有提交,因此更改不会显示给其他连接(取决于作用域)。您似乎没有在任何地方使用
con
。我可以想象您的数据库工厂正在创建自己的连接。此外,我猜您需要在启动事务之前打开连接。@Rob请参阅编辑的帖子。
据我所知,在thrasaction完成之前,不会执行此操作。
-这是错误的。tSQL肯定会立即执行。事务只是没有提交,所以更改不会显示给其他连接(取决于范围)。