如果使用三层架构(ui+bll+dal+dbsqlhelp+model)这样的结构,在BLL层中已经写好了方法(其他层次代码省略)
public DataSet Select_BLL()
{
jobdal = new DAL.Job_DAL();
try
{
return jobdal.Select_Job_Dal();
}
catch(System.Exception ex)
{
throw new Exception(ex.Message);
}
}
public bool Update_BLL(Model.Job_Model job)
{
jobdal = new DAL.Job_DAL();
try
{
return jobdal.Update_Job_Dal(job);
}
catch(System.Exception ex)
{
throw new Exception(ex.Message);
}
}
public bool Insert_BLL(Model.Job_Model job)
{
jobdal = new DAL.Job_DAL();
try
{
return jobdal.Insert_Job_Dal(job);
}
catch(System.Exception ex)
{
throw new Exception(ex.Message);
}
}
public bool Delete_BLL(Model.Job_Model job)
{
jobdal = new DAL.Job_DAL();
try
{
return jobdal.Delete_Job_Dal(job);
}
catch(System.Exception ex)
{
throw new Exception(ex.Message);
}
}问题:
1.如果在DataList中做好了各个模板,为什么DataList不能像FormView那样,自动完成所有功能,是否还要手动去写代码?如果是麻烦大家帮我写一个删除的代码(注意:BLL中的参数是对象)
2.如果操作有错误,哪么需要处理异常,问了很多人都说抛到UI去处理,哪么现在BLL抛出去了,UI层在那里写代码,那个事件里可以得到BLL中抛出的这个异常对象。谢谢大家了,这个问题困扰了我很久,麻烦大家帮帮忙!
public DataSet Select_BLL()
{
jobdal = new DAL.Job_DAL();
try
{
return jobdal.Select_Job_Dal();
}
catch(System.Exception ex)
{
throw new Exception(ex.Message);
}
}
public bool Update_BLL(Model.Job_Model job)
{
jobdal = new DAL.Job_DAL();
try
{
return jobdal.Update_Job_Dal(job);
}
catch(System.Exception ex)
{
throw new Exception(ex.Message);
}
}
public bool Insert_BLL(Model.Job_Model job)
{
jobdal = new DAL.Job_DAL();
try
{
return jobdal.Insert_Job_Dal(job);
}
catch(System.Exception ex)
{
throw new Exception(ex.Message);
}
}
public bool Delete_BLL(Model.Job_Model job)
{
jobdal = new DAL.Job_DAL();
try
{
return jobdal.Delete_Job_Dal(job);
}
catch(System.Exception ex)
{
throw new Exception(ex.Message);
}
}问题:
1.如果在DataList中做好了各个模板,为什么DataList不能像FormView那样,自动完成所有功能,是否还要手动去写代码?如果是麻烦大家帮我写一个删除的代码(注意:BLL中的参数是对象)
2.如果操作有错误,哪么需要处理异常,问了很多人都说抛到UI去处理,哪么现在BLL抛出去了,UI层在那里写代码,那个事件里可以得到BLL中抛出的这个异常对象。谢谢大家了,这个问题困扰了我很久,麻烦大家帮帮忙!
Exception e=Server.GetLastError();
try
{}
catch
{}
第二个是你在UI的Try中调用BLL时如果发生了异常就会自动跑到与这个Try相对应的Catch中去了...
在ObjectDataSource的inserted事件中有一个参数ObjectDataSourceStatusEventArgs,通过e.Exception可以获知是否出错,可以进行处理。
而删除更新新增等操作也是如此。
DataList的更新删除等功能,都需要你自己写代码来实现.下面是MSDN实现删除的方法
允许用户删除单个项
向页面添加数据源控件。为数据源控件定义删除命令或方法。 例如,如果正在使用 SqlDataSource 控件,则将数据源控件的 DeleteCommand 属性设置为 SQL Delete 语句,该语句包含 ID 的占位符,如下面的示例所示: 复制代码
DELETE FROM Categories WHERE CategoryID = @CategoryID
如果正在使用 ObjectDataSource 控件,则将 DeleteMethod 属性设置为执行删除的方法的名称。在数据源控件中,为 DeleteParameters 属性创建一项,该属性包含一个用于要删除记录的 ID 的参数。例如,一个 SqlDataSource 元素可能看起来类似于下面这样: 复制代码
<asp:SqlDataSource ID="SqlDataSource1"
Runat="server"
ConnectionString=
"<%$ ConnectionStrings:NorthwindConnectionString %>"
DeleteCommand="DELETE FROM [Categories]
WHERE [CategoryID] = @CategoryID">
<DeleteParameters>
<asp:Parameter Type="Int32"
Name="CategoryID">
</asp:Parameter>
</DeleteParameters>
</asp:SqlDataSource>
注意
其他命令,如 SelectCommand 和 UpdateCommand,未在该示例中显示。
一个 ObjectDataSource 元素可能看起来类似于下面这样: 复制代码
<asp:ObjectDataSource ID="ObjectDataSource1" Runat="server"
DeleteMethod="DeleteCategory()">
<DeleteParameters>
<asp:Parameter Name="example"></asp:Parameter>
</DeleteParameters>
</asp:ObjectDataSource>
在 DataList 控件中,将 DataKeyField 属性设置为想要从中删除记录的表的主键。在 ItemTemplate(以及 AlternatingItemTemplate,如果您在使用它)中,添加 Button 或 LinkButton Web 服务器控件。将该按钮的 CommandName 属性设置为 delete。DataList 控件元素的标记可能看起来类似于下面这样: 复制代码
<asp:DataList ID="DataList1" Runat="server"
DataSourceID="SqlDataSource1"
DataKeyField="CategoryID"
OnDeleteCommand="DataList1_DeleteCommand">
<ItemTemplate>
CategoryName: <asp:Label ID="CategoryNameLabel"
Runat="server"
Text='<%# Eval("CategoryName") %>'>
</asp:Label>
<br />
Description: <asp:Label ID="DescriptionLabel"
Runat="server"
Text='<%# Eval("Description") %>'>
</asp:Label>
<br />
<asp:Button ID="Delete" Runat="server"
Text="Delete"
CommandName="delete" />
</ItemTemplate>
</asp:DataList>
为 DataList 控件的 DeleteCommand 事件创建一个事件处理程序。在方法中: 从 DataList 控件的 DataKeys 集合获取要删除的记录的 ID。可以使用当前项的 ItemIndex 属性返回的索引获取当前记录的键。为在第 3 步中创建的参数设置 DefaultValue 属性。 调用数据源控件的 Delete 方法。下面的代码使用名为 SqlDataSource1 的 SqlDataSource 控件作为数据源演示这些任务:Visual Basic 复制代码
Protected Sub DataList1_DeleteCommand(ByVal source As Object,
ByVal e As DataListCommandEventArgs)
Dim id As Integer = _
CInt(DataList1.DataKeys(e.Item.ItemIndex))
SqlDataSource1.DeleteParameters("CategoryID").DefaultValue _
= id
SqlDataSource1.Delete()
End Sub
C# 复制代码
protected void DataList1_DeleteCommand(object source,
DataListCommandEventArgs e)
{
int id = (int)DataList1.DataKeys[e.Item.ItemIndex];
SqlDataSource1.DeleteParameters["CategoryID"].DefaultValue
= id;
SqlDataSource1.Delete();
}
异常就用try/catch
哪么如果是用objectdatasource 他需要调用BLL中的方法,而方法需要的是对象 类型的参数怎么办?用sqldatasource我会的。
但是微软说做3层架构推荐的就是objectdatasource。麻烦再给讲解一下。谢谢了!
sqldatasource與objectdatasource的不同是,objectdatasource相關方法要求的對象參數需要由你自己構造,從當前項中讀取賦值。
這與GridView不同,GridView進行了許多封裝,可以自動處理,但DataList封裝較少,因此性能會更好。