【问题标题】:Wrapper for stored procedures to use as SqlDataSource存储过程的包装器用作 SqlDataSource
【发布时间】:2014-10-17 09:13:18
【问题描述】:

我目前在我的 gridviews 上的代码页上有 SqlDatasource 的所有 SQL 代码。

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

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

我想在一个存储过程中对每个源进行更新删除和选择,以免有几十个存储过程,所以我想使用我可以发送的模式(int)参数,然后使用 if 使用正确的查询声明。

如果这是正确的方法,那么我只需要包装器的帮助,如果没有人可以建议最好的方法来做到这一点,而每个 SqlDataSource 没有 3/4 存储过程

【问题讨论】:

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


    【解决方案1】:

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

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

    在包装器后面的代码中是 SqlDatasource 用于存储过程,因为它用于普通 sql 代码。
    如果您将 *CommandType 设置为值 StoredProcedure,您就完成了。

    关于多个存储过程的“问题”,我认为这可能是个人喜好问题;恕我直言,最好拥有处理单个操作的简单存储过程。
    更容易维护,提高可读性,减少难以调试的错误。

    【讨论】:

    • 是的,我几乎根据需要创建了 Sql,Crowcoder 和你自己都说将所有内容都放在一个 SP 中并不好,但肯定每个 Source 有一个 SP 比管理大量 Sp 更容易必须搜索才能找到您想要的?
    • @user3652973 想想 c#:为什么要将代码拆分为类和对象?相同的答案对 sql 代码有效:您没有类,但有 sp、function 等。对象数量少!=易于维护/调试。当您编写 sql 代码时,如果您增加对象的复杂性,即使是微不足道的故障,调试时间也可能会增加。
    【解决方案2】:

    最好的办法是总是让别人去做。像实体框架这样的 ORM 非常棒。或者您可以使用来自Enterprise Library. 的数据访问应用程序块 但不要将插入/更新/删除放在一个存储过程中。这是不好的做法。

    【讨论】:

      猜你喜欢
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多