我已经实现了一个3层架构,可以在下面的链接
中看到在上面的示例中,它使用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>
答案 0 :(得分:3)
SqlDataSource不适合3层架构。 这取决于你如何做到这一点。您不必将其分开,但如果您希望在此处拥有适当的3层体系结构,则需要在数据层中使用某种数据库处理类进行CRUD操作。
您链接的文章清楚地解释了这一点。如果您不想使用DataTable,您可以创建自己的POCO对象来处理
等数据public class Order {... }
您的业务层方法看起来像
List<Order> GetOrders(...) {...}
和数据
//CRUD naming convention
List<Order> ReadOrders (...) {...}
答案 1 :(得分:2)
Roland上面的答案已经解决了: -
我将在问题的最后部分给出0.02美元: -
好吧,就像最现实的答案一样。这取决于。
这取决于具体情况 - 拥有3层架构的主要原因是什么?这种设计的一些优点包括更好的可维护性,更好的可测试性和更好的可扩展性。相反,使用SQLDataSource可以加快开发速度。
我个人的经验是,出于上述某些原因而采用分层设计通常是一个更好的主意,因此我通常会避免使用SQLDataSource,甚至可以通过使用代码来取消SQLDataSource的开发优势。像CodeSmith这样的生成器。所以,我认为从长远来看,使用SQLDataSource没有任何好处