使用SqlDataReader时“数据为空”

问题描述:

我的代码中的最后一个字符串有问题。使用SqlDataReader时“数据为空”

这是我的代码:

private void comboLname_SelectedIndexChanged(object sender, EventArgs e) 
{ 
      string conn = "Data Source=srv-db-02;Initial Catalog=rmsmasterdbtest;Persist Security Info=True;User ID=test;Password=*****"; 
      string Query = "select * from RMSCRMTest.dbo.sales where LastName= '" + comboLname.Text + "' ;"; 


      SqlConnection Myconn = new SqlConnection(conn); 
      SqlCommand cmdDataBase = new SqlCommand(Query, Myconn); 
      SqlDataReader Reader; 
      try 
      { 
       Myconn.Open(); 
       Reader = cmdDataBase.ExecuteReader(); 
       while (Reader.Read()) 
       { 
        string ID = Reader.GetInt32(Reader.GetOrdinal("ID")).ToString(); 
        string AccountNuber = Reader.GetString(Reader.GetOrdinal("AccountNumber")).ToString(); 
        string Time = Reader.GetDateTime(Reader.GetOrdinal("Time")).ToString(); 
        string Deposit = Reader.GetDecimal(Reader.GetOrdinal("Deposit")).ToString(); 
        string slastname = Reader.GetString(Reader.GetOrdinal("lastname")); 
        string sstatus = Reader.GetString(Reader.GetOrdinal("status")); 
        txtid.Text = ID; 
        txtacnum.Text = AccountNuber; 
        txttime.Text = Time; 
        txtdeposit.Text = Deposit; 
        txtlname.Text = slastname; 
        txtstatus.Text = status; 

       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      finally 
      { 
       Myconn.Close(); 
      } 
} 

这个问题说明,因为我添加另一列到我的表,并创建的字符串到列 串

sstatus = Reader.GetString(Reader.GetOrdinal("status")); 

我得到的错误是

data is null此方法或属性无法在空值上调用

其他字符串正常工作。

您需要使用SqlDataReader.IsDBNull方法检查可空字段:

int statusIndex = Reader.GetOrdinal("status"); 
string sstatus = Reader.IsDBNull(statusIndex) ? null : Reader.GetString(statusIndex); 
+0

我代替我与你行,我得到“无法投型‘system.Int32’的对象输入系统字符串'” – Motimash

+0

对不起,我没有做对了,让我再次检查,并会回来给你谢谢 – Motimash

+0

它工作非常感谢你,请你能解释为什么我不得不添加int作为此列是varchar,我真的很新这个世界 – Motimash