当我按地址过滤时,我收到此错误:语法错误:''运算符后缺少操作数

时间:2013-12-07 21:11:14

标签: c#

BindingSource bs = new BindingSource();
bs.DataSource = dataGridViewShowPeople.DataSource;
bs.Filter = " Convert(ID, 'System.String') like '" + textBoxId.Text + "%' AND  Convert(lastName, 'System.String') like '%" + textBoxLastName.Text + "%' AND Convert(firstName, 'System.String') like '" + textBoxFirstName.Text + "%' AND Convert(address, 'System.String') like '" + textBoxAddress.Text + "%'";             
dataGridViewShowPeople.DataSource = bs;

2 个答案:

答案 0 :(得分:1)

您的一个或多个文本框中可能只有一个引号。这可能会破坏字符串连接逻辑并混淆尝试应用Filter属性的代码 您需要调用string.Replace方法将文本框值中的每个引号char加倍,如MSDN中DataColumn.Expression属性

中所述
  

用户定义的值可以在要与之比较的表达式中使用   列值。字符串值应该包含在单个值中   引号(以及字符串值中的每个单引号字符   必须通过在另一个单引号前加上它来逃避   字符)即可。 .....

但是我发现对CONVERT函数的调用很可疑,至少对于字段firstNamelastNameaddress。它们很可能已经是数据库端的字符串,因此无需调用CONVERT函数

string ID = textBoxId.Text.Replace("'", "''");
string last = textBoxLastName.Text.Replace("'","''");
string first = textBoxFirstName.Text.Replace("'", "''");
string address = textBoxAddress.Text.Replace("'", "''");
BindingSource bs = new BindingSource();
bs.DataSource = dataGridViewShowPeople.DataSource;
bs.Filter = string.Format("Convert(ID, 'System.String') like '{0}%' AND " + 
                          "lastName like '%{1}%' AND firstName like '{2}%' AND " + 
                          "address like '{2}%'", ID, last, first, address);

答案 1 :(得分:0)

bs.Filter = " Convert(ID, 'System.String') like '%" + textBoxId.Text + "%' AND  Convert(lastName, 'System.String') like '%" + textBoxLastName.Text + "%' AND Convert(firstName, 'System.String') like '%" + textBoxFirstName.Text + "%' AND Convert(address, 'System.String') like '%" + textBoxAddress.Text + "%'";   

你在某些地方错过了%