2012-12-06 78 views
1

所以我有一個函數從數據庫中檢索數據並輸出它。它被封裝在try塊中,以便處理從行耗盡到處理的錯誤。嘗試塊被調用兩次

這裏有被稱爲負載的功能(使初始輸出),並呼籲後來在更新日誌框。

問題是,每當我再次調用函數時,它會輸出兩次數據。由於只有數據在try塊中,而不是頭文件,所以指向try/catch是問題。

道歉凌亂/哈克代碼:

private void NavigateRecords() 
    { 
     da.Fill(ds1, "LogOutput"); 
     textlog4.Text = "Date \t\t Time \t\t Floor\r\n"; 
     try 
     { 
      for (int i = 0; i <= 20; i++) 
      { 
       DataRow dRow = ds1.Tables["LogOutput"].Rows[i]; 
       for (int i2 = 1; i2 <= 3; i2++) 
       { 
        textlog4.Text += dRow.ItemArray.GetValue(i2).ToString() + "\t\t"; 
       } 
       textlog4.Text += "\r\n"; 

      } 
     } 
     catch { textlog4.Text += "----------------------"; } 
    } 

這是做連接的部分的代碼,並且可以是使用的:

 string sql = "SELECT * From tblLog"; 
     da = new System.Data.SqlClient.SqlDataAdapter(sql, con); 
     NavigateRecords(); 

初始輸出:

Date   Time  Floor 
6/12  18:18:22  1  
---------------------- 

輸出下次調用時:

Date   Time  Floor 
6/12  18:18:22  1  
6/12  18:46:19  2  
6/12  18:18:22  1  
6/12  18:46:19  2  
---------------------- 
+0

如何調用'NavigateRecords()'以及在哪裏使用'ds1'? –

+0

您使用調試器嗎?通過你的代碼,你會看到發生了什麼。 try/catch沒有問題。 – roken

+3

如果我猜測,我會說表中有重複的信息,而不是'try'被調用兩次。爲了記錄,我對你依賴程序邏輯的異常並不狂熱。 –

回答

7

它不是你的try catch的問題,它與你的變量有關。在添加新數據之前清除該變量。我沒有看到你的變量在方法範圍內聲明,所以它保留了你原來放入它的數據。

+0

完美。 ds1需要清除。謝謝。 – JakeSteam