【问题标题】:SqlDataReader stops reading values if null is present in table如果表中存在 null,则 SqlDataReader 停止读取值
【发布时间】:2014-03-27 14:38:24
【问题描述】:

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

这是我正在使用的代码:

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 除了IssueDatesmalldatetime 中之外,我正在检索的所有值都以nvarchar 的形式存储在数据库中。

【问题讨论】:

  • 可能您调用上述代码的代码有一个 try/catch,它正在吞噬读者遇到空值时抛出的异常。要么测试 null (rdr.IsDBNull),要么您也可以使用 ToString() 将 null 值转换为空字符串(例如 rdr[0].ToString())
  • 尝试了你的建议。还是一样的问题。
  • 一旦你解决了实际的停止问题,你可能还想阅读 SQL 注入然后使用参数。
  • @HenkHolterman 你这是什么意思?我正在阅读所有的记录。如果表的特定行中没有空值,我的代码运行良好。如果有,它会在此时停止读取。
  • 我正在学习 C#,所以我用谷歌搜索,这是我从数据库中检索多个值到文本框中的代码stackoverflow.com/questions/16565035/…

标签: c# sql-server sqldatareader


【解决方案1】:

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

我替换了这个:

textBox3.Text = rdr.GetString(0);

有了这个:

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

【讨论】:

  • 哇,这么简单。谢谢。
【解决方案2】:

试试这个...

while (rdr.Read()) {

如果 (rdr.IsDBNull(0)) { textBox3.Text = rdr.GetString(0); } 其他 { textBox3.Text = ""; }

---- 对于日期时间

if (rdr.IsDBNull(9)) { textBox2.Text = rdr.GetDateTime(9).ToString(); } 其他 { textBox2.Text = ""; }

}

【讨论】:

    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 2010-11-26
    • 2014-01-25
    • 1970-01-01
    • 2017-09-20
    • 2021-10-27
    • 2019-05-16
    • 2012-06-07
    相关资源
    最近更新 更多