捕获事务连接后的SqlTransaction为空

pdu*_*usp 6 c# connection transactions try-catch sqltransaction

我有一个循环,我在其中调用具有不同参数值的存储过程。下一次调用cmd.ExecuteNonQuery(); 我使用事务来保存全部或回滚,并使用 checkBox2 - 始终保存。我发现了一个问题,但找不到解决方案。在触发 catch 块的第一个问题之后,事务对象失去连接。 t.connection一片空白!一切都很好,但事务对象在开始时没有连接

    try 
        {

        while (!sr.EndOfStream)
        {
            strLine.Remove(0, strLine.Length);
            //c = sr.ReadLine();

             while (c != "-")
              {
               c = sr.ReadLine();
               strLine.Append(c );
               if (sr.EndOfStream) break;
              }

             //strLine.Append("Nowa pozycja");
             try
             {
                 cmd.Parameters["@s"].Value = strLine.ToString();
                 cmd.Parameters["@Return_value"].Value = null;
                 cmd.ExecuteNonQuery();
             }
             catch
             {
                 if (cmd.Parameters["@Return_value"].Value == null)
                 {
                     cmd.Parameters["@Return_value"].Value = -100;
                 }

                 if (((int)cmd.Parameters["@Return_value"].Value == 100) || (checkBox2.Checked))
                 {
                     if ((int)cmd.Parameters["@Return_value"].Value != 100)
                     {
                         MessageBox.Show("S? b?edy!   " + cmd.Parameters["@s"].Value);
                     };
                 }
             }

         if (!checkBox2.Checked)
         {
             if ((Int32)cmd.Parameters["@Return_value"].Value != 100)
             {
                 break;
             }
         }

        c = "";
        }
        textBox1.Text = strLine.ToString();


        }
     catch
        {
          // t.Rollback();
         //  t = null;
           textBox1.Text = strLine.ToString();
           textBox1.Visible = true;
           MessageBox.Show("Wyst?pi?y problemy w czasie importu  " + cmd.Parameters["@s"].Value);
           //return;
        }

        finally
        {
            if (cmd.Parameters["@Return_value"].Value == null)
            {
                cmd.Parameters["@Return_value"].Value = -100;
            }

            if (((int)cmd.Parameters["@Return_value"].Value==100)||(checkBox2.Checked)) 
            {
                t.Commit();  
                if ((int)cmd.Parameters["@Return_value"].Value!=100)
                {
                    MessageBox.Show("Transakcja zapisana ale w pliku by?y b?edy!   " + cmd.Parameters["@s"].Value);
                };
            }
        else
        { 
           if (t!=null) {t.Rollback();}
           MessageBox.Show("Transakcja odrzucona!");
        }


        conn2.Close();
        aFile.Close();
        }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Edy*_*dyn 3

遇到了类似的问题。就我而言,这是针对特定的 SqlException 发生的。大多数异常都会被捕获并处理得很好,但是每当我遇到转换错误(例如尝试将字符串转换为数字)时,它都会自动结束事务。

为了解决这个问题,我必须在构建/提交命令对象之前实施数据检查(无论如何都是个好主意)。希望这可以帮助其他人看到这个奇怪的错误。