【发布时间】: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 除了IssueDate 在smalldatetime 中之外,我正在检索的所有值都以nvarchar 的形式存储在数据库中。
【问题讨论】:
-
可能您调用上述代码的代码有一个 try/catch,它正在吞噬读者遇到空值时抛出的异常。要么测试 null (rdr.IsDBNull),要么您也可以使用 ToString() 将 null 值转换为空字符串(例如 rdr[0].ToString())
-
尝试了你的建议。还是一样的问题。
-
一旦你解决了实际的停止问题,你可能还想阅读 SQL 注入然后使用参数。
-
@HenkHolterman 你这是什么意思?我正在阅读所有的记录。如果表的特定行中没有空值,我的代码运行良好。如果有,它会在此时停止读取。
-
我正在学习 C#,所以我用谷歌搜索,这是我从数据库中检索多个值到文本框中的代码stackoverflow.com/questions/16565035/…
标签: c# sql-server sqldatareader