用于存储过程的包装器,用作SqlDataSource

时间:2014-10-17 09:13:18

标签: c# sql asp.net stored-procedures

我目前在网格视图上的SqlDatasource的代码页上有所有SQL代码。

我的想法是因为页面背后的代码在服务器上是安全的但我被告知这仍然受到攻击,我应该迁移到存储过程并使用包装器来调用它们。

将SQL传输到存储过程不是问题,但我不知道如何为它们创建包装器。

我想更新删除并选择一个存储过程中的每个源,以便没有几十个存储过程,所以我想使用我可以发送的模式(int)参数然后使用if中的正确查询语句。

如果这是正确的方法,那么我只需要帮助包装器,如果没有,任何人都可以建议最好的方法来做到这一点,而没有每个SqlDataSource

的3/4存储过程

2 个答案:

答案 0 :(得分:0)

你没有明确提到它,但我想你动态创建sql代码:问题是sql injection

使用存储过程可以完全避免它,因为您使用参数;您也可以使用普通sql代码的参数,但通常首选存储过程。我想到的第一个原因是:sql代码在数据库上,与前端(在不同的层上)分开,可以在不改变前端的情况下更改/修复/更新/升级。

包装器后面的代码中的

是存储过程的SqlDatasource,就像普通的sql代码一样。
如果您将*CommandType设置为值StoredProcedure,则表示已完成。

关于多个存储过程的“问题”我认为这可能是一个品味问题; imho最好有简单的存储过程来处理单个操作 更容易维护,提高可读性,减少难以调试的错误的机会。

答案 1 :(得分:0)

最好的方法是永远让别人去做。像实体框架这样的ORM很棒。或者您可以使用Enterprise Library.中的数据访问应用程序块 但是不要将insert / update / delete放在一个存储过程中。这是不好的做法。