无法通过 sqldatareader 检索数据

Can't retrieve data through sqldatareader

我想从 sql 数据库中检索数据,并根据我提供的值将该数据设置到某些文本框。比如,如果我提供一个名字 "John",它应该获取针对 john 的所有数据并将其放在文本框中。代码如下

string query = "SELECT * FROM PatientInfo WHERE Name LIKE '@Name';";
using (SqlConnection cn = new SqlConnection(constr))
using (SqlCommand cmd = new SqlCommand(query, cn))
   {
       cn.Open();
       cmd.Parameters.AddWithValue("@Name",String.Format("%{0}%", txtsearchpatient.Text));
       SqlDataReader reader = cmd.ExecuteReader();
       if (reader.HasRows)
        {
            while (reader.Read())
            {
                txtid_search.Text = reader["PatientID"].ToString();
                txtname_search.Text = reader["Name"].ToString();
                txtphone_search.Text = reader["Phone"].ToString();
                txtage_search.Text = reader["Age"].ToString();
                txtaddress_search.Text = reader["Address"].ToString();
                txtemail_search.Text = reader["Email"].ToString();
            }
         }
        else
        {
            MessageBox.Show("No record found");
        }
        reader.Close();
        cn.Close();
   }

我收到错误 "Invalid attempt to read when no data is present",而当我在 sql management studio 中使用相同的查询手动执行查询时,它成功返回了所有字段。问题出在哪里?

在您的 SQL 字符串中,您使用了 '@Name',它是标量字符串值 "@Name" 而不是预期的 @Name 参数。

只要去掉@Name两边的单引号,问题就解决了。