【问题标题】:How to use textbox to search data in data grid view如何使用文本框在数据网格视图中搜索数据
【发布时间】:2019-06-07 11:41:13
【问题描述】:

假设您有一个表,并且您想要过滤任何类型的数据。我希望显示与此值相关的整行,例如,日期、名称、描述、值,仅过滤 1 个表字段

string filter = "";
string command = "SELECT * FROM Movimentos WHERE [Tipo de Movimento] = 'Crédito'";


if (textDataMovimento.Text != "")
{
    filter = filter + "[Data Movimento] LIKE '%" + textDataMovimento.Text + "%' AND";
}
if (textDataValor.Text != "")
{
    filter = filter + " [Data Valor] LIKE '%" + textDataValor.Text + "%' AND";
}
if (textDescricao.Text != "")
{
    filter = filter + " [Descrição] LIKE '%" + textDescricao.Text + "%' AND";
}
if (textValor.Text != "")
{
    filter = filter + " [Valor] LIKE '%" + textValor.Text + "%' AND";
}
if (textTipodeMovimento.Text != "")
{
    filter = filter + "[Tipo de Movimento] LIKE  '%" + textTipodeMovimento.Text + "%'AND";
}

【问题讨论】:

  • 注意SQL注入,改用参数
  • 我是来寻求帮助的,我是新来使用这种语言的,只用了几天时间
  • 只需将您的参数传递给您的查询并使用ISNULL(Param, Column) 这样您就不需要检查文本框是否为空。老实说,我不知道 C#。过滤器属性很难,因为您需要检查每个文本框是否输入AND,只需使用查询参数即可。
  • 我指的是我在您的其他帖子上发表的评论(在不同的帐户上?):“您所追求的是SqlCommand.Parameters Property。SQL 命令的参数化非常重要。如果你不熟悉它,我建议阅读SQL Injection。”
  • 另外你在"SELECT * FROM Movimentos WHERE [Tipo de Movimento] = 'Crédito'"的决赛中错过了AND。想象一下只有textDataMovimento.Text != ""为真,那么查询将是"SELECT * FROM Movimentos WHERE [Tipo de Movimento] = 'Crédito' [Data Movimento] LIKE '%valueoftextbox%' AND",它是无效的,会抛出错误。

标签: c# sql asp.net sql-server


【解决方案1】:

一些很有帮助的提示,虽然我不认为这些会是你想要的答案,但它们应该会给你一些关于良好应用程序设计的指导......

  1. 切勿将 UI 代码与数据层代码混用(查看 N 层架构)
  2. 应该避免 SQL 注入,或许可以考虑使用 ORM
  3. 将控件绑定到对象应该比直接从 DB 中获取数据值更可取(阅读“关注点分离”。

虽然可能更接近您的预期目标......

考虑使用“LINQ to SQL”之类的东西......它允许您的 C# 成为 C#,并且底层框架将以“安全”的方式处理您对数据库的查询生成。

至于将数据实际绑定到网格以呈现结果,请考虑其中一些选项...

https://www.google.com/search?q=binding+a+datagrid+view+to+an+object+collection

...

最后说明

我知道这可能会给您带来更多问题,并且可能不是本意,但我认为需要提出很多关于此实现的内容,以便您改进使用此技术的方式,以避免软件开发中的常见陷阱。

【讨论】:

    【解决方案2】:

    只需准备一个动态 sql 原始查询,即可根据匹配列值搜索匹配行。

    注意:永远不要在原始查询中直接使用参数值,始终使用 sql 参数来传递值。这有助于避免 sql 注入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多