【问题标题】:Remove Spaces from SQL Results When Searching搜索时从 SQL 结果中删除空格
【发布时间】:2017-08-21 17:51:29
【问题描述】:

我有一个 Access 数据库,其中包含带有空格的字段。我正在尝试允许用户搜索匹配项,但结果中的空格未返回任何信息。

var dtCustomers = new DataTable();
var adapter = new OleDbDataAdapter("SELECT * FROM Devices WHERE [Serial Number]='" + textBox1.Text + "'", conn);
adapter.Fill(dtCustomers);
dataGridView1.DataSource = dtCustomers;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
    row.Cells[0].Style.ForeColor = Color.Blue;
    row.Cells[28].Style.ForeColor = Color.Red;
}

上面的代码会从数据库返回结果,但是如果数据库有一个输入为“1Z 4568 29z4h”的字段,那么除非用户完全按照这种方式输入,否则它不会被返回。结果显示在 DataGridView 中。我应该使用其他查询吗?

【问题讨论】:

  • 所以在相等性测试之前删除空格,这取决于您的数据库语法:... WHERE REPLACE([Serial Number], " ", "")='... 您还应该使用参数化查询,因为目前您有一个 SQL 注入漏洞。 (也从该参数值中删除所有空格)

标签: c# sql datagridview


【解决方案1】:

您可以使用 SQL 的replace 函数将[Serial Number] 列中的所有空格替换为空,并使用textBox1.Text.Replace(' ','') 确保用户的输入也没有空格:

var dtCustomers = new DataTable();
var adapter = new OleDbDataAdapter(@"SELECT * FROM Devices WHERE replace([Serial Number], " ", "")='" + textBox1.Text.Relpace(' ','') + "'", conn);
adapter.Fill(dtCustomers);
dataGridView1.DataSource = dtCustomers;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
    row.Cells[0].Style.ForeColor = Color.Blue;
    row.Cells[28].Style.ForeColor = Color.Red;
}

【讨论】:

  • 那么你还需要替​​换用户输入中的空字符:textBox1.Text.Replace(...),以便轻松匹配用户输入
  • 我收到一条错误消息:“System.Data.OleDb.OleDbException: 'Undefined function 'REPLACE' in expression.'” 查询也不喜欢使用“”、“”并说 OleDbDataAdapter 不支持 4 个重载。用撇号替换引号可以消除该错误。
  • 当我尝试运行显示“System.Data.OleDb.OleDbException: '标准表达式中的数据类型不匹配”的搜索时收到错误消息。我在 Access 数据库中搜索的内容是文本,尽管它看起来是数字。这会导致这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 2012-02-28
  • 2011-08-26
相关资源
最近更新 更多