Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在代码中进行SQL查询的正确方法?_C#_.net_Sql_Sql Server - Fatal编程技术网

C# 在代码中进行SQL查询的正确方法?

C# 在代码中进行SQL查询的正确方法?,c#,.net,sql,sql-server,C#,.net,Sql,Sql Server,我正在Visual Studio中使用SQL Server。我正在制作一个web应用程序 我已经创建了一个包含表和关系的数据库 我需要用C#编写能够进行选择、更新、删除、查询等操作的函数。是否有人了解一种正确的方法来保持事情的干净和安全 我的意思是,我应该如何建立连接,如何返回数据,如何处理故障,等等 我发现的大多数教程似乎都没有使用最佳实践。您不使用的原因是什么,仅举几个例子。除非您正在执行一些非常复杂的SQL语句,否则ORM每次都是合乎逻辑的选择。它将处理连接,提供某种程度的安全性(即采取措

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

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

我需要用C#编写能够进行选择、更新、删除、查询等操作的函数。是否有人了解一种正确的方法来保持事情的干净和安全

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


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

您不使用的原因是什么,仅举几个例子。除非您正在执行一些非常复杂的SQL语句,否则ORM每次都是合乎逻辑的选择。它将处理连接,提供某种程度的安全性(即采取措施避免SQL注入),并使代码更易于阅读和维护。

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

在我看来,使用表和关系最干净的方法是使用ObjectDataSource,然后将数据绑定到控件,并将所有查询放入SPs

第二种是使用实体框架和LINQtoSQL

将连接字符串放入web.config文件,并使用Singleton类获取连接对象

有几个选项:

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

  • 编辑:最佳实践不是使用内联SQL查询,我错误地说它们为SQL注入打开了漏洞,但如果你做得对,你可以安全地这样做。我应该说的是,如果您正在尝试最佳实践,请不要使用它们。主要是因为在这一过程中,其他一些程序员可能正在处理您的代码,因为您使用了内联SQL,如果他们不知道SQL注入,他们可能会进行一些更改,从而允许出现漏洞。通过完全避免使用内联SQL,不仅可以避免在安全方面犯错误,而且在某种程度上,这是一种防御性编程技术,从这个意义上讲,如果您一开始不使用内联SQL,未来的程序员就不太可能使用它。希望不要混淆:)

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

    你可以用微型ORM代替。这些库比较简单,不提供EF和NH所能提供的所有功能,但它们都能够将查询映射到对象列表。
    如果你的应用程序不是超级复杂,也许这对你来说就足够了

    最著名的.NET微型ORM有:

    • (由Stack Overflow的员工制作和使用)

    我会在linq-to-sql上进行谷歌搜索。你考虑过使用ORM吗?这通常被认为是一个“已解决的问题”。或者您可以编写更安全的存储过程(您不必允许用户直接访问表,从而限制他们只在过程中执行操作),并且比ORMS更容易进行性能调整。如果您正确地参数化了内联SQL查询,这些都很好,不会为SQL注入打开漏洞!没错。我编辑了我的答案,以澄清您可以安全地使用它们,但为什么我没有/从未按照最佳做法使用它们。