代码之家  ›  专栏  ›  技术社区  ›  Manos Dilaverakis

使用bindingsource的filter属性时如何正确转义SQL

  •  0
  • Manos Dilaverakis  · 技术社区  · 14 年前

    我继承了一个C应用程序,它通过DataGridView从数据库表中列出数据。还有一些文本字段用于筛选该数据。这样做:

    String listFilter = string.Format("City = '{0}'", this.toolStripSearch.Text);
    this.customersBindingSource.Filter = listFilter;
    

    ToolStripSearch是按城市名称搜索的文本字段。问题是没有SQL转义。向字段中添加报价会使应用程序崩溃。

    在这里,正确的方法是什么?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Alex Humphrey    14 年前

    我认为“正确”的方法 BindingSource.Filter 就是简单地用 '' 听起来很可怕。比如说。

    String listFilter = string.Format("City = '{0}'", this.toolStripSearch.Text.Replace("'", "''")); 
    this.customersBindingSource.Filter = listFilter;  
    

    这个 Filter 属性使用的语法与 DataColumn 表达式 BindingSource 绑定到数据库中的数据。

    http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.filter.aspx

    您可以在此处找到有关所需语法的文档:

    http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

    从那个链接:

    应将字符串值括起来 在单引号内(和 中的每个单引号字符 字符串值必须由转义 用另一张单曲作准备 引号字符)。