C# 直接插入或通过存储过程插入
我正在为我的应用程序使用sql server和winforms。通过按下表单上的按钮,每分钟都会将数据插入到数据库表中 为此,我使用INSERT查询C# 直接插入或通过存储过程插入,c#,sql-server-2005,tsql,stored-procedures,C#,Sql Server 2005,Tsql,Stored Procedures,我正在为我的应用程序使用sql server和winforms。通过按下表单上的按钮,每分钟都会将数据插入到数据库表中 为此,我使用INSERT查询 但是如果我创建一个过程并在其中包含相同的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优化中获益——这并不是真的——一旦解析了参数化查询,它的执行就会