Den*_*ail 1 .net sql-server stored-procedures
当谈到CRUD操作和数据库(SQL Server '08)时,将SQL语句写入代码或使用存储过程是否更好?为什么?
如下所述,我省略了LINQ作为第三种选择.这样做是因为我不熟悉LINQ...然而.如果LINQ是更好的选择,请告诉我我缺少的东西.
Aar*_*and 10
我更喜欢存储过程而不是将SQL嵌入到应用程序中.
例如,当您直接引用应用程序中的表时,应用程序必须对表具有适当的权限.与仅允许应用程序登录执行某些存储过程相比,这可能是一种更高的安全风险.
另一件事是,如果您需要更改SQL查询,则可能需要重新编译并重新部署应用程序.在最简单的情况下,这是微不足道的,但如果您的代码是分布式的和/或如果您有多个不同的应用程序与同一个数据库通信,那么它可能很麻烦.现在,您必须在多个位置进行更改,即使查询的接口或结果保持不变.
最后,存储过程实际上强制您强烈键入您的参数(是的,您仍然可以传递由多个值组成的字符串,如果您愿意,您仍然可以使用动态SQL,但您必须更加努力地做到这一点).在动态构建字符串并使自己暴露于SQL注入方面,应用程序中的SQL往往会出现更多问题.是的,您可以在应用程序代码中构建更好的参数化语句,但坦率地说,根据我的经验,这是例外而不是规则.
在这两个存储过程中,如果没有其他原因,在生产过程中更容易更改存储过程,而不是部署新代码.正如克里斯蒂安指出的那样,它不太容易受到注入攻击(非参数化SQL对此非常不利).
有性能优势,但它们具有重要意义.
Jeff(StackOverflow创始人)喜欢LINQ to SQL,这与使用存储过程不同,但总体上比使用内联代码更安全.
存储过程的另一个优点是您不必在表级别授予权限(除非您使用动态SQl,由于多种原因应避免使用它).这意味着您的内部用户可以直接访问这些表,使他们不太可能执行除"存储过程允许的内容"之外的其他操作.这有助于减少欺诈的可能性.
存储过程的进一步优点是它们(在我看来)更容易进行性能调整.
最后,如果您的数据库服务于多个前端,则存储过程是标准化应用程序之间查询的好方法.
| 归档时间: |
|
| 查看次数: |
430 次 |
| 最近记录: |