2

我遇到了一个问题,希望你能帮助我。我是 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();
    }
}

从注释掉的部分可以看出,我也无法在表格中获取一个位字段来更新网页上的复选框。任何帮助表示赞赏!

4

2 回答 2

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
}
于 2013-04-26T21:57:45.560 回答
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())改用。

于 2013-04-26T21:58:54.027 回答