2012-03-23 19 views
4

我有,我調用存儲不同的參數值的程序循環。 下次通話cmd.ExecuteNonQuery(); 我用交易來保存所有或回滾和checkBox2 - 永遠保存。 我發現一個問題,我找不到解決方案。 第一個問題出現在catch塊被觸發時事務對象失去連接。 t.connection爲空! 一切都很好,但交易對象是沒有在啓動它連接的SqlTransaction爲空

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(); 
     } 

enter image description here

+0

你錯過的代碼在該塊相當數量。我想說,你的第一步將是簡化它,併發布整塊。另外,我會考慮*不*把括號放在他們自己的路線上;掃描一大塊空白的代碼很困難。 (但這是我的意見) – NotMe 2012-03-23 13:09:23

+0

你如何設置你的連接和交易? – Strillo 2012-03-23 13:14:34

+0

我設置了他們:如果(!conn2.State = ConnectionState.Open)conn2.Open(); SqlTransaction t = conn2.BeginTransaction(); – pdusp 2012-03-23 13:17:29

回答

2

遇到類似的問題。在我的情況下,它發生了一個特定的SqlException。大多數異常都會被捕獲並處理,但每當我遇到轉換錯誤(例如嘗試將字符串轉換爲數字)時,它都會自動結束事務。

爲了解決這個問題,我有(反正好主意)來實現數據校驗大廈之前/提交的命令對象。希望這有助於他人看到這個奇怪的錯誤。

1

我也遇到了這個問題奇(轉換爲nvarchar到整數除外)。

在我的解決方案,我重建transacton如果發現底層連接爲空。但這是一項骯髒的工作。

enter image description here

相關問題