2013-10-20 80 views
2

在下面的代碼,的實例時我按下按鈕2,它說:對象引用不設置爲一個對象asp.net

對象引用不設置爲一個對象的一個​​實例

這是怎麼回事?

public partial class rec : System.Web.UI.Page 
{ 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|DB.mdf;Integrated Security=True;User Instance=True"); 

      SqlCommand cmd; 
      con.Open(); 

      cmd = new SqlCommand("SELECT SrviceType, Msg FROM OrderNum ", con); 

      SqlDataReader dr; 
      dr = cmd.ExecuteReader(); 

      dr.Read(); 

      Label1.Text = dr[0].ToString(); 
      TextBox1.Text = dr[1].ToString(); 
     } 
     catch (Exception ex) 
     { 
      System.Windows.Forms.MessageBox.Show(ex.Message); 
     } 
    } 

    protected void Button2_Click(object sender, EventArgs e) 
    { 
     SqlDataReader dr = null; 

     try 
     { 
      dr.Read(); 
      Label1.Text = dr[0].ToString(); 
      TextBox1.Text = dr[1].ToString(); 
     } 
     catch (Exception ex) 
     { 
      System.Windows.Forms.MessageBox.Show(ex.Message); 
     } 
    } 
} 
+4

您聲明'SqlDataReader的博士= NULL;'然後下一行調用'閱讀()'對空法,還有什麼你期待什麼呢? – PSL

+0

如果我把 SqlDataReader dr; 它會給我這個錯誤::使用未分配的局部變量'dr' –

+0

您需要閱讀變量範圍。它給你的錯誤,因爲「博士」還沒有分配任何價值。 – PhoenixReborn

回答

3
SqlDataReader dr = null; 

然後嘗試從空對象從

dr.Read(); 

閱讀確認這是網頁,你不能保持狀態,如果你想獲得Button_click1數據rearder

1

SqlDataReader對象用於保存從database.which執行/獲取數據的一次結果可以用於迭代每一行,以獲得所需的列。因此,在嘗試從SqlDataReader對象讀取它應該有一些數據。

其可通過下面的語句來完成:

SqlDataReader的sqldatareaderobject = sqlcommandobject.ExecuteReader();

您在Button1_click函數中遵循上述原則,但您在Button2_click函數中缺少相同的原理。

在您的案例「dr」中,SqlDataReader對象包含null,因爲您錯過了調用ExecuteReader()函數的操作,並且在您調用空對象(dr)頂部的Read()函數時拋出異常。

謝謝

相關問題