c# MySQL绑定源抛出一个求值异常

本文关键字:一个 异常 绑定 MySQL | 更新日期: 2023-09-27 18:16:18

我正在制作一个c#应用程序,它连接到MySQL数据库并列出结果。我添加了两个文本框,这两个文本框应该允许用户通过用户id和用户名/姓氏对两个文本框的textchanged事件过滤数据。代码如下所示

        private void tbSearchStudents_TextChanged(object sender, EventArgs e)
        {
            BindingSource binding = new BindingSource();
            binding.DataSource = dataGridViewStudents.DataSource;
            this.tsProgressBar.Visible = true;
            this.tsProgressBar.Style = ProgressBarStyle.Marquee;
            binding.Filter = @"students.uid LIKE '%" + this.tbSearchId.Text + @"%' 
                               AND CONCAT_WS(' ' , students.name, students.surname) 
                               LIKE '%" +  this.tbSearchName.Text + "%'";
            this.dataGridViewStudents.DataSource = binding;
            this.tsProgressBar.Visible = false;
        }

然而,当我运行我的程序并尝试在这些文本框中输入一些东西时,我得到一个EvaluationException异常:
The expression contains undefined function call CONCAT_WS().

当我只使用id文本框之前,我添加了名字/姓氏一个,只使用students.uid LIKE '%" + this.tbSearchId.Text + @"%'一切工作正常。

怎么回事?它接受LIKE的表达,但不识别CONCATCONCAT_WS的功能。

c# MySQL绑定源抛出一个求值异常

因为CONCAT_WS是连接字符串的MySql函数,但不是NET框架已知的函数,并且适用于BindingSource的Filter属性。在这种情况下,你不是要求MySql数据库引擎解析你的过滤器,你是在与。NET框架对话,你应该遵循它的规则。

您需要使用+ operator应用于字符串,如datacoluml对象的表达式属性(the BindingSource)中解释的那样。Filter属性遵循相同的规则)

binding.Filter = @"students.uid LIKE '%" + this.tbSearchId.Text + @"%' 
                   AND students.name + ' ' + students.surname) 
                   LIKE '%" +  this.tbSearchName.Text + "%'";

还要注意文本框内的单引号,如果有像O'Hara这样的学生姓氏,您可能会收到另一个语法错误。为安全起见,请添加

...
AND students.name + ' ' + students.surname) 
LIKE '%" +  this.tbSearchName.Text,Replace("'", "''") + "%'";
....