【发布时间】:2013-04-26 21:52:40
【问题描述】:
我遇到了一个问题,希望你能帮助我。我是 C#、ASP.NET 和 SQL 的新手,所以请多多包涵。我在我的数据库中创建了一个表,其中包含有关狗的信息。我创建了一个带有下拉列表和几个文本框的网页。 ddl 填充了表中的“名称”字段(该部分正在工作)。我想要的是允许用户从 ddl 中选择一个名称,然后让文本框自动填充所选记录中的相应信息。每次我尝试,我都会收到错误:"Invalid attempt to read when no data is present."
这是我的事件处理程序代码:
protected void ddlDog_SelectedIndexChanged(object sender, EventArgs e)
{
String connectionString = WebConfigurationManager.ConnectionStrings["Dogs"].ConnectionString;
string selectSQL = "SELECT * FROM dog WHERE name=@name";
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(selectSQL, con);
SqlDataReader reader;
cmd.Parameters.AddWithValue("@name", txtName.Text);
try
{
con.Open();
reader = cmd.ExecuteReader();
reader.Read();
txtName.Text = reader["name"].ToString();
txtBreed.Text = reader["breed"].ToString();
txtAge.Text = reader["age"].ToString();
txtAddress.Text = reader["address"].ToString();
txtCity.Text = reader["city"].ToString();
/*if ((bool)reader["pure"] == true)
{
cbxPure.Checked = true;
}*/
reader.Close();
}
catch (Exception err)
{
lblMsg.Text = err.Message;
}
finally
{
con.Close();
}
}
从注释掉的部分可以看出,我也无法在表格中获取位字段来更新网页上的复选框。任何帮助表示赞赏!
【问题讨论】:
-
Melissa,请在调试器中逐步执行此操作,让我知道是哪一行引发了错误。这个特定的错误消息有点误导 - 它并不意味着人们认为它意味着什么。还要检查您的列名 - 从查询中删除 * 并列出列名,然后当您读取这些列时,这些名称在您的 C# 代码中是区分大小写的,因此请确保您的大小写与查询匹配(没有匹配表 def,因为 SQL 不区分大小写)。永远不要在代码查询中使用 * - 它是您应该只在立即模式下使用的快捷方式。
-
顺便说一句,如果行数为零,则 HasRows 可能仍然为 true,并且 Read() 将返回 false 但不会抛出异常。