【问题标题】:writing SQL queries - methods to write complicated ones!编写 SQL 查询 - 编写复杂查询的方法!
【发布时间】:2011-01-26 20:57:31
【问题描述】:

大家好,有没有人有什么建议可以帮助解决以下问题?

我正在重写一些软件,这是我为我工作的原型所做的,我正在把它变成一个更符合 OOP 的程序 :)

我刚刚编写了一个自定义数据库处理程序类来处理我的连接、我的查询等。这个想法是这个数据库处理程序完成了处理数据库所需的一切,并且只返回正在运行的查询的结果集。

无论如何,我刚刚编写了一些方法来为我编写 SQL 查询 - 我的想法是我以数组的形式向它传递一些参数,然后该类编写查询所需的 SQL 字符串,从而消除 SQL 注入问题。

我的问题是;使用普通选择(使用 where 参数和 order/group by )以及插入和更新,这些都可以正常工作。但是,如果我想传递一个可能有连接的查询,或者一个多表连接或一个 where 子句,它在 where 上包含一个 like 或一个子选择(这可能通过运行 select 方法两次是可行的!)

我不知道如何获得产生这些查询的方法。有没有人有什么建议? - 可能必须在无法自己编写查询的情况下构建自定义的。

另一个想法是将事情复杂化,只执行一个调用来删除传递的字符串中包含的斜杠。

提前致谢,

无敌

顺便说一句,如果它没有多大意义,从今天早上 7 点开始编码,大脑正在慢慢死亡! :)T

【问题讨论】:

  • 如果可能,不要自己动态生成 SQL。使用静态 SQL 或使用 ORM 为您生成 SQL。动态 SQL 很难正确执行。你很可能会犯错误。

标签: c# mysql visual-studio


【解决方案1】:

我鼓励您考虑为您需要的功能编写stored procedures,而不是尝试编写某种通用查询构建机制。

【讨论】:

    【解决方案2】:

    您可以只使用带参数的 sqlcommand,而不是 http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx

    【讨论】:

      【解决方案3】:

      如果您需要复杂的查询构建机制,请考虑使用已开发的众多 ORM 框架之一,例如 NHibernate 或 MSEF。这些允许您使用 Linq(经过编译器检查;一定会喜欢它)创建一些非常复杂的查询,然后将其转换为 SQL。

      【讨论】:

        【解决方案4】:

        如果您在表格上有选项,您可以考虑使用 LINQ to SQL 数据层。这将使您可以将表和查询结果作为类处理。

        开始制作数据库的 .dbml 非常容易,check out a walk through on MSDN

        它还将动态 SQL 创作留给 MS 语言团队,这很好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-10
          • 2015-07-13
          相关资源
          最近更新 更多