6

我有一个循环,我用不同的参数值调用存储过程。下一次调用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();
        }

在此处输入图像描述

4

2 回答 2

3

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

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

于 2014-01-15T22:28:51.440 回答
1

我也遇到了这个奇怪的问题(将 nvarchar 转换为整数异常)。

在我的解决方案中,如果发现底层连接为空,我会重建事务。但这是一项肮脏的工作。

在此处输入图像描述

于 2015-04-25T08:31:07.483 回答