我有Follwing代码。要按StdName搜索,但是当我运行此代码时,它会在datagrid视图中显示空单元格。帮我纠正一下。
private void btnSBN_Click(object sender, EventArgs e)
{
String query = "Select * from Student where StdName like '*@Name*'";
OleDbCommand cmd = new OleDbCommand(query, cn);
cmd.Parameters.Add("@Name", OleDbType.VarChar, 20);
cmd.Parameters["@Name"].Value = txtName.Text;
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = cmd;
try
{
DataSet ds = new DataSet();
da.Fill(ds,"SBN");
dgStudent.DataSource = ds;
dgStudent.DataMember = "SBN";
dgStudent.Refresh();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message);
}
}
编译器没有显示语法错误,也没有异常。但在数据网格视图中显示空单元格。
答案 0 :(得分:2)
'*@Name*'
是你的问题。
如果您正在寻找完全匹配,请不要使用'*'。
如果您正在寻找在StdName中某处找到@Name的实例,请使用:
'%' + @Name + '%'.
你也不应该在引号内包含@Name。如果它完全匹配:
StdName = @Name
答案 1 :(得分:0)
使用参数查询时,请记住在CommandText中永远不应该有分隔符。如果后台需要分隔符,OleDbCommand对象将为您处理它们。
String query = "Select * from Student where StdName like @Name";
OleDbCommand cmd = new OleDbCommand(query, cn);
cmd.Parameters.Add("@Name", OleDbType.VarChar, 20);
cmd.Parameters["@Name"].Value = "%" + txtName.Text + "%";