2017-06-03 83 views
0

我想从sql数据库中检索数据,并根据我提供的值将该数据设置为某些文本框。就像,如果我提供了一个名字“约翰”,它应该获取所有的数据反对约翰,并把它放在文本框。代码如下无法通过sqldatareader检索数据

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(); 
    } 

我收到错误“无效尝试时,不存在数据读取”当我手动执行在SQL Management Studio中的查询与它成功返回的所有字段相同的查询时。哪里有问题?

+0

'LIKE'@ Name''应该是'LIKE @ Name' –

+0

它的工作原理:O当我这样做时,它说“必须声明标量变量名”,但现在它工作。非常感谢 。请张贴您的回复,以便我可以将其标记为答案。 – SidraM

回答

2

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

只需删除围绕@Name的单引号,问题就会解决。