【问题标题】:Proper way to make SQL queries in code? [closed]在代码中进行 SQL 查询的正确方法? [关闭]
【发布时间】:2013-01-14 21:20:58
【问题描述】:

我在 Visual Studio 中使用 SQL Server。我正在制作一个网络应用程序。

我创建了一个包含表和关系的数据库。

我需要在 C# 中编写能够进行选择、更新、删除、查询等功能的函数。有没有人知道正确的方法来做到这一点以保持事情的清洁和安全?

我的意思是,我应该如何建立连接,我应该如何返回数据,处理故障等?

我发现的大多数教程似乎都没有使用最佳实践。

【问题讨论】:

  • 我会在 linq-to-sql 上进行谷歌搜索。
  • 您是否考虑过为此使用 ORM?这通常被认为是“已解决的问题”。
  • 或者您可以编写更安全的存储过程(您不必允许用户直接访问表,从而限制他们只在过程中执行操作)并且比性能更容易调整ORMS。

标签: c# .net sql sql-server


【解决方案1】:

您不使用ORM 是否有充分的理由? Entity FrameworkLinq to SQLNHibernate,仅举几例。除非您正在执行一些非常复杂的 SQL 语句,否则 ORM 每次都是合乎逻辑的选择。它将处理连接,提供一定程度的安全性(即采取措施避免 SQL 注入),以及使您的代码更易于阅读和维护。

【讨论】:

    【解决方案2】:

    Microsoft 的最佳实践“du jour”是实体框架。否则,像 NHibernate 这样的 ORM 也是不错的选择。

    【讨论】:

      【解决方案3】:

      如果它是一个相对较小/简单的应用程序,也许您不需要像 NHibernate 或实体框架这样的成熟 ORM。

      您可以改用 Micro ORM。这些是更简单的库,不能提供 EF 和 NH 可以做的所有事情,但它们都能够将查询映射到对象列表。
      如果您的应用不是很复杂,也许这对您来说已经足够了。

      最知名的 .NET 微 ORM 是:

      【讨论】:

        【解决方案4】:

        几个选项:

        1. 实体框架,在许多地方都被认为是最佳实践。
        2. Linq to SQL,又是一个很好的实践。
        3. 其他 ORM,流行的通常是很好的做法
        4. 通过存储过程编写您自己的后端接口,这不是最佳做法,也绝对不是节省时间,但如果您不熟悉 ORM 及其较小的应用程序,这可能会更快。

        编辑: 最佳做法是不要使用内联 SQL 查询,我错误地说它们会为 SQL 注入打开漏洞,但如果你做对了,你可以安全地这样做。我应该说的是,如果您正在尝试最佳实践,请不要使用它们。主要是因为下线,其他一些程序员可能正在处理您的代码,看到您执行了内联 SQL,如果他们不了解 SQL 注入,他们可能会做出允许存在漏洞的更改。通过完全避免内联 SQL,您不仅可以避免在安全方面犯错,而且它在某种程度上是一种防御性编程技术,因为如果您不使用内联 SQL,未来的程序员不太可能使用它。第一名。希望这不会让人困惑:)

        【讨论】:

        • 如果您正确地为您的内联 SQL 查询参数化,这些都是完美的很好并且不要为 SQL 注入打开一个漏洞!
        • 没错。我编辑了我的答案以澄清您可以安全地使用它们,但为什么我不/从不这样做是最佳实践。
        【解决方案5】:

        在我看来,使用表和关系最简洁的方法是使用 ObjectDataSource,然后使用 Databind 来控制并将所有查询放入 SP。

        二是使用Entity Framework和Linq-to-SQL

        将您的连接字符串放入 web.config 文件中,并使用 Singleton 类来获取 Connection 对象。

        【讨论】:

          猜你喜欢
          • 2013-08-15
          • 1970-01-01
          • 1970-01-01
          • 2013-02-20
          • 1970-01-01
          • 1970-01-01
          • 2019-09-24
          • 2015-11-12
          • 2020-05-24
          相关资源
          最近更新 更多