无法通过 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
两边的单引号,问题就解决了。
我想从 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
两边的单引号,问题就解决了。