将SqlDataSource移动到类文件ASP.NET

时间:2015-07-06 20:50:03

标签: c# asp.net

我的任务是将所有SqlDataSource个对象从ASP.NET页面的aspx文件中移出并将它们放入一个单独的类文件中但是丢失了。有没有办法在单独的类中创建SqlDataSource对象并将查询字符串分配给SelectCommandDeleteParametersInsertParameters等?

在哪里可以在单独的页面上调用对象而不是在aspx中使用代码?

2 个答案:

答案 0 :(得分:2)

是的,你可以这样做。我建议您将所有数据库IO移动到Web服务。

我还想补充一点,就你的应用程序的安全性而言,这是你正在采取的一个非常好的步骤。将您的数据访问权限与用户IO分离,我认为这是必须具备的安全措施。如果做得好,您将大大提高应用程序的安全性。

您可以轻松地创建WCF Web服务。网上有很多教程,我很乐意为你提供指导。 Web服务将具有CRUD(插入,选择,更新,删除)操作。然后,您可以创建一个"对象"在网页上键入数据源,指向您的Web服务,页面上的元素可以从这些对象数据源获取数据。您还可以在代码中实例化Web服务,并使用它来操作数据。创建对象类型数据源时,将指定与每个命令(select,insert,update ...)对应的服务方法。希望这能指出你正确的方向,并随时在评论中向我提出更多意见,或者你可以发起聊天,我会给你我的电子邮件,你可以向我大喊大叫。

答案 1 :(得分:1)

如前所述,可以将SqlDataSource控件移出WebForm。我现在假设您当前的代码在.aspx文件中声明了这些控件。例如,您可以更改为命令式方法,并在WebForm的代码隐藏类的事件处理程序中实例化数据源控件,但这样做并没有获得多少收益。实际上,您甚至可以将执行实例化的大量代码移动到由代码隐藏类调用的辅助类中,但这不会让您更进一步。

DataSource控件的最初目的是为开发人员提供一种创建快速原型/概念证明的方法。但这些控制并不适用于生产系统。它们违反了关注点的分离,即使不是不可能,也会使单元测试变得困难。

在某些方面,DataSource控件可以更容易使用(例如,与GridView控件一起使用)。但是,这种便利是有代价的,这可能有助于解释(部分)为什么要求你对控件做些什么。不幸的是,当ASP.Net 2.0(WebForms)于2005年发布时,当时发布的文献大大促进了这些DataSource控件的使用。从那时起,社区已经了解到这些控件的生产价值是值得怀疑的,除非您正在研究不需要经过多长时间演变的简单系统。

正如Anon316所提到的,您可以使用Web服务来处理CRUD操作。但是,这个解决方案可能不是您真正需要的。使用Web服务(即,对服务的附加HTTP请求)会产生额外的开销。让您的应用程序直接调用数据库仍然是一个非常好的方法。

说到这一点,考虑创建一个提供数据访问工具的独立类(或类)(例如,存储库)。例如,实体框架使得创建此类事物相当简单(并且.Net生态系统中还有许多其他数据访问库)。准备好为WebForms的代码隐藏类添加更多代码,以使它们与您的Repository(或其他数据访问)类进行交互。您将获得的好处是更可测试性和重用您的数据访问代码。考虑将您的数据访问类放入解决方案中的单独项目中(开始)。

无论是在解决方案还是Web服务中创建单独的数据访问类,您仍然需要进行大量重构才能远离DataSource控件。因此,再次注意使用Web服务所涉及的额外开销,认识到当您拥有多个客户端(例如Web和移动设备)时,Web服务往往是有意义的,而不是只有一个客户端。