Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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# 直接插入或通过存储过程插入_C#_Sql Server 2005_Tsql_Stored Procedures - Fatal编程技术网

C# 直接插入或通过存储过程插入

C# 直接插入或通过存储过程插入,c#,sql-server-2005,tsql,stored-procedures,C#,Sql Server 2005,Tsql,Stored Procedures,我正在为我的应用程序使用sql server和winforms。通过按下表单上的按钮,每分钟都会将数据插入到数据库表中 为此,我使用INSERT查询 但是如果我创建一个过程并在其中包含相同的insert查询,那么效率会更高吗,那么会有什么不同呢?使用存储过程更安全使用存储过程更安全存储查询计划时,存储过程通常会更快,并且不需要为每次调用创建存储过程。如果这是一个简单的插入,差异将是最小的 存储过程可以使用执行权限运行,执行权限比向用户授予插入权限更安全。存储过程通常会更快,因为存储了查询计划,并

我正在为我的应用程序使用sql server和winforms。通过按下表单上的按钮,每分钟都会将数据插入到数据库表中

为此,我使用INSERT查询


但是如果我创建一个过程并在其中包含相同的insert查询,那么效率会更高吗,那么会有什么不同呢?

使用存储过程更安全

使用存储过程更安全

存储查询计划时,存储过程通常会更快,并且不需要为每次调用创建存储过程。如果这是一个简单的插入,差异将是最小的


存储过程可以使用执行权限运行,执行权限比向用户授予插入权限更安全。

存储过程通常会更快,因为存储了查询计划,并且不需要为每次调用创建存储过程。如果这是一个简单的插入,差异将是最小的


存储过程可以使用执行权限运行,执行权限比向用户授予插入权限更安全。

这取决于“高效”的含义

  • 执行时间-如果仅每隔几秒钟将数据保存到数据库,则SPs和INSERT之间的任何速度差异都很可能是微不足道的。如果音量特别大,在进行此级别的微调之前,您可能会在服务器上设置类似命令队列的内容
  • 开发时间
    • 使用INSERT意味着您可以直接在代码库(在存储库或类似库中)中编写SQL。我认为这被描述为糟糕的设计,但我认为只要您对查询进行集成测试,就不会有真正的问题
    • 存储过程可能更难维护—您需要制定将新SP部署到数据库的计划。好处是,您可以在数据库本身上实现更细粒度的安全性(正如@b-rain和@mark_所说),并且很容易在SP中决定插入和更新,而在代码中执行相同的操作意味着做出某些假设

就我个人而言(目前),我使用内联SQL进行查询和删除,使用存储过程进行插入。我有一个脚本和一组迁移文件,可以针对生产数据库运行这些脚本和文件,以部署表和SP更改,这似乎运行得很好。我还对内联SQL和SP调用进行了集成测试。如果您选择内联SQL,您肯定应该使用参数化查询,它有助于抵御SQL注入攻击,而且更易于阅读和编程。

这取决于您所说的“高效”是什么意思

  • 执行时间-如果仅每隔几秒钟将数据保存到数据库,则SPs和INSERT之间的任何速度差异都很可能是微不足道的。如果音量特别大,在进行此级别的微调之前,您可能会在服务器上设置类似命令队列的内容
  • 开发时间
    • 使用INSERT意味着您可以直接在代码库(在存储库或类似库中)中编写SQL。我认为这被描述为糟糕的设计,但我认为只要您对查询进行集成测试,就不会有真正的问题
    • 存储过程可能更难维护—您需要制定将新SP部署到数据库的计划。好处是,您可以在数据库本身上实现更细粒度的安全性(正如@b-rain和@mark_所说),并且很容易在SP中决定插入和更新,而在代码中执行相同的操作意味着做出某些假设

就我个人而言(目前),我使用内联SQL进行查询和删除,使用存储过程进行插入。我有一个脚本和一组迁移文件,可以针对生产数据库运行这些脚本和文件,以部署表和SP更改,这似乎运行得很好。我还对内联SQL和SP调用进行了集成测试。如果您选择内联SQL,您肯定应该使用参数化查询,它有助于抵御SQL注入攻击,并且更易于阅读和编程。

如果您的DBA允许您在没有存储过程的情况下执行此操作,我会非常怀疑…

如果您的DBA允许您在没有存储过程的情况下执行此操作,我会非常怀疑…

您能提供更多信息吗,以何种方式更安全?如果您允许用户调用存储过程,则该用户只需要对该存储过程具有执行权限-该用户不需要对基础表具有插入、更新、删除权限,这会使其更安全(如果该用户应启动Access或Excel并尝试直接使用数据库)更多的是关于web开发,但用户可以使用SQL注入技术。在insert语句中使用用户输入的数据之前,需要对输入进行清理。存储过程以参数形式接收所有用户输入,因此SQL注入是不可能的。此外,可以在数据库中更改存储过程,而无需重新编译应用程序。他们可以从各种SQL优化中受益。请提供更多信息,以何种方式更安全?如果您允许用户调用存储过程,则该用户只需对该存储过程具有执行权限-该用户不需要对基础表具有插入、更新、删除权限,这将使其更安全(如果该用户应启动Access或Excel并尝试直接使用数据库)这更多的是关于web开发,但用户可以使用SQL注入技术。在insert语句中使用用户输入的数据之前,您需要清理输入。存储过程以参数形式接收所有用户输入,因此SQL注入是不可能的。此外,存储过程可以在数据库中更改,而无需重新编译应用程序n、 它们还可以从各种SQL优化中获益——这并不是真的——一旦解析了参数化查询,它的执行就会