2013-09-24 33 views
0

當我在插入或更新數據庫中的某些內容後使用MySqlDataReader時,出現System.NullReferenceException異常。MySqlDataReader更新後的NullReferenceException

這裏是我的代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    using (var conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["mysqlconn"].ConnectionString)) 
     { 
      conn.Open(); 
      using (MySqlCommand comm = conn.CreateCommand()) 
      { 
       comm.CommandText = "UPDATE zs_orders SET orderNo = @orderNo, firstSent = @firstSent WHERE ID = @id"; 
       comm.Parameters.AddWithValue("orderNo", "dasda"); 
       comm.Parameters.AddWithValue("firstSent", DateTime.Now); 
       comm.Parameters.AddWithValue("id", Convert.ToInt32(3)); 
       comm.ExecuteNonQuery(); 
       comm.Cancel(); 
       comm.Dispose(); 
      } 
      conn.Close(); 
     } 


     using (var myConn = new MySqlConnection(ConfigurationManager.ConnectionStrings["mysqlconn"].ConnectionString)) 
     { 
      myConn.Open(); 
      using (MySqlCommand cmd = new MySqlCommand("select * from zs_customers;", myConn)) 
       { 
        using (MySqlDataReader dr = cmd.ExecuteReader()) 
        { 
         while (dr.Read()) // << Error 
         { 
          //.... 
         } 
         dr.Close(); 
         myConn.Close(); 
        } 
       } 
     } 
} 

這裏是錯誤:

System.NullReferenceException – Object reference not set to an instance of an object.

Row 45: using (MySqlDataReader dr = cmd.ExecuteReader()) 
Row 46: { 
Row 47 >>>:  while (dr.Read()) 
Row 48:   { 
Row 49:    //.... 

[NullReferenceException: Object reference not set to an instance of an object.] zs_test.Page_Load(Object sender, EventArgs e) in c:\Users\JennyJ\skydrive\www\wwwroot\zs-test.aspx.cs:47
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51 System.Web.UI.Control.OnLoad(EventArgs e) +92
System.Web.UI.Control.LoadRecursive() +54
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772

+0

你確定你的'zs_customers'表不是空的嗎?因爲你插入'zs_orders'表..而'3'是一個'int',所以沒有必要像'Convert.ToInt32(3)' –

+0

一樣使用它。如果我沒有更新任何東西,它可以正常工作。 – JennieJ

+0

例如,如果我創建了一個客戶,然後導航到另一個具有客戶列表的Webform,該錯誤也會出現。這似乎與連接到數據庫發生了一些事情。 – JennieJ

回答

0

使用if(dr.HasRows)從SqlDataReader對象中讀取數據,以避免System.NullReferenceException前 - 對象引用不設置爲一個實例一個東西。

+0

如果我添加,我會得到相同的錯誤。有匹配的記錄,但是如果我訪問dr對象,則會得到nullreference的執行結果。 – JennieJ

+0

如果你在頁面上執行另一個服務器事件,那麼在if(!IsPostBack){}塊中寫上面的代碼。 – Mohit

0

好吧,我已經找到了錯誤..

正是這條線:

   comm.Cancel(); 

它不應該存在。愚蠢的錯誤。

相關問題