我遇到了一个问题,希望你能帮助我。我是C#,ASP.NET和SQL的新手,所以请耐心等待。我在我的数据库中创建了一个包含狗的信息的表。我创建了一个带有下拉列表和几个文本框的网页。 ddl填充了表中的“name”字段(该部分正在工作)。我想要的是允许用户从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();
}
}
从注释掉的部分可以看出,我也遇到了在表格中获取位字段以更新网页上的复选框的问题。任何帮助表示赞赏!!
答案 0 :(得分:0)
尝试将括号中的作业括起来,事先检查是否有要阅读的行
if (reader.HasRows)
{
while(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();
}
}
else{
//Empty datareader
}
答案 1 :(得分:0)
试试这个:
if (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;
}*/
}
如果您期望的结果超过1,则可以使用while (reader.Read())
。