Gridview与3层架构中的复杂sqldatasource

时间:2012-08-08 13:46:05

标签: gridview sqldatasource n-tier-architecture 3-tier

我已经实现了一个3层架构,可以在下面的链接

中看到

http://geekswithblogs.net/edison/archive/2009/04/05/a-simple-3-tier-layers-application-in-asp.net.aspx

在上面的示例中,它使用DataTable作为sqldatasource,并使用以下代码将其绑定到gridview。

GridView1.DataSource = Client.GetClients();
GridView1.DataBind();

但是我的数据源不是数据表,它是一个常规的sqldatasource,您可以在其中编辑,删除和更新。所以我不知道如何将它从我的表示层中分离出来,还是应该真的分开?这是我的sqldatasource的代码:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyDbConn %>"
    DeleteCommand="DELETE FROM [OrderDetail] WHERE [RowNo] = @RowNo" InsertCommand="INSERT INTO [OrderDetail] ([FileNo], [PONumber], [MaterialCode], [MaterialDescription], [MaterialCategory], [UnitOfMeasure], [Quantity], [ContainerType], [LoadingDate]) VALUES (@FileNo, @PONumber, @MaterialCode, @MaterialDescription, @MaterialCategory, @UnitOfMeasure, @Quantity, @ContainerType, @LoadingDate)"
    SelectCommand="SELECT * FROM [OrderDetail]" UpdateCommand="UPDATE [OrderDetail] SET [FileNo] = @FileNo, [PONumber] = @PONumber, [MaterialCode] = @MaterialCode, [MaterialDescription] = @MaterialDescription, [MaterialCategory] = @MaterialCategory, [UnitOfMeasure] = @UnitOfMeasure, [Quantity] = @Quantity, [ContainerType] = @ContainerType, [LoadingDate] = @LoadingDate WHERE [RowNo] = @RowNo">
    <DeleteParameters>
        <asp:Parameter Name="RowNo" Type="Int32" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="FileNo" Type="Int32" />
        <asp:Parameter Name="PONumber" Type="String" />
        <asp:Parameter Name="MaterialCode" Type="String" />
        <asp:Parameter Name="MaterialDescription" Type="String" />
        <asp:Parameter Name="MaterialCategory" Type="String" />
        <asp:Parameter Name="UnitOfMeasure" Type="String" />
        <asp:Parameter Name="Quantity" Type="Int32" />
        <asp:Parameter Name="ContainerType" Type="String" />
        <asp:Parameter Name="LoadingDate" Type="String" />
    </InsertParameters>
    <UpdateParameters>
        <asp:Parameter Name="FileNo" Type="Int32" />
        <asp:Parameter Name="PONumber" Type="String" />
        <asp:Parameter Name="MaterialCode" Type="String" />
        <asp:Parameter Name="MaterialDescription" Type="String" />
        <asp:Parameter Name="MaterialCategory" Type="String" />
        <asp:Parameter Name="UnitOfMeasure" Type="String" />
        <asp:Parameter Name="Quantity" Type="Int32" />
        <asp:Parameter Name="ContainerType" Type="String" />
        <asp:Parameter Name="LoadingDate" Type="String" />
        <asp:Parameter Name="RowNo" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>

2 个答案:

答案 0 :(得分:3)

SqlDataSource不适合3层架构。 这取决于你如何做到这一点。您不必将其分开,但如果您希望在此处拥有适当的3层体系结构,则需要在数据层中使用某种数据库处理类进行CRUD操作。

您链接的文章清楚地解释了这一点。如果您不想使用DataTable,您可以创建自己的POCO对象来处理

等数据
public class Order {... }

您的业务层方法看起来像

List<Order> GetOrders(...) {...}

和数据

//CRUD naming convention
List<Order> ReadOrders (...)  {...}

答案 1 :(得分:2)

Roland上面的答案已经解决了: -

  1. 关于分层架构(假设分割DAL / BL / UI)如何与使用SQLDataSource无关,因为在使用SQLDataSource时没有这种分离。
  2. 如何在不使用POCO / Datatables的SQLDataSouce的情况下将其分开
  3. 我将在问题的最后部分给出0.02美元: -

    1. 它应该真的分开吗?
    2. 好吧,就像最现实的答案一样。这取决于。

      这取决于具体情况 - 拥有3层架构的主要原因是什么?这种设计的一些优点包括更好的可维护性,更好的可测试性和更好的可扩展性。相反,使用SQLDataSource可以加快开发速度。

      我个人的经验是,出于上述某些原因而采用分层设计通常是一个更好的主意,因此我通常会避免使用SQLDataSource,甚至可以通过使用代码来取消SQLDataSource的开发优势。像CodeSmith这样的生成器。所以,我认为从长远来看,使用SQLDataSource没有任何好处

相关问题