如果表中存在null,则SqlDataReader将停止读取值

时间:2014-03-12 11:09:45

标签: c# sql-server sqldatareader

我使用SqlDataReader将值读取到数据库,然后将值存储在适当的文本框中。如果行中没有空值,代码工作正常,但如果有,则在遇到null后停止读取所有值,并在所有文本框中显示空白。

这是我正在使用的代码:

SqlConnection con = new SqlConnection(ConfigurationManager.
ConnectionStrings["CS"].ConnectionString.ToString());

con.Open();

cmd.CommandText = "SELECT dbo.asp2.CustomerName, dbo.asp2.Email,
dbo.asp2.CP, dbo.asp2.CPN, dbo.asp2.ProductName, dbo.asp2.Warranty,
dbo.asp2.ProductSerial, dbo.asp2.ProductNumber, dbo.asp2.Description,
dbo.asp2.IssueDate, dbo.asp2.Status, dbo.asp2.Remarks, 
dbo.asp2.EngineerName from dbo.asp2 where ID='" + textBox1.Text + "'";

cmd.Connection = con;

rdr = cmd.ExecuteReader();

while (rdr.Read())
{
    textBox3.Text = rdr.GetString(0);
    textBox4.Text = rdr.GetString(1);
    textBox5.Text = rdr.GetString(2);
    textBox6.Text = rdr.GetString(3);
    textBox7.Text = rdr.GetString(4);
    textBox8.Text = rdr.GetString(5);
    textBox9.Text = rdr.GetString(6);
    textBox10.Text = rdr.GetString(7);
    textBox11.Text = rdr.GetString(8);
    textBox2.Text = rdr.GetDateTime(9).ToString();
    textBox12.Text = rdr.GetString(10);
    textBox13.Text = rdr.GetString(11);
    comboBox1.Text = rdr.GetString(12);  
}
con.Close(); 

我似乎无法在这里找出问题所在。你能指出来吗?我需要它做的是,将文本框设置为空,其中有一个空值,如果表中有值,则将该值设置为文本框。

P.S我检索的所有值都存储为nvarchar数据库,但IssueDate中的smalldatetime除外。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题(读者在遇到null后停止了),我做的是:

我取而代之:

textBox3.Text = rdr.GetString(0);

用这个:

textBox3.Text = rdr["ColumnName"].ToString();

答案 1 :(得分:0)

试试这个......

  

while(rdr.Read()){

     

if(rdr.IsDBNull(0))       {textBox3.Text = rdr.GetString(0); } else {textBox3.Text ="&#34 ;; }

     

----对于日期时间

     

if(rdr.IsDBNull(9))       {textBox2.Text = rdr.GetDateTime(9).ToString(); } else {textBox2.Text ="&#34 ;; }

     

}