如果使用三层架构(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中抛出的这个异常对象。谢谢大家了,这个问题困扰了我很久,麻烦大家帮帮忙!

解决方案 »

  1.   

    Page_Error(object Sender,EventArgs e)
    Exception e=Server.GetLastError();
      

  2.   

    异常的时候你不让它表现出来
    try
    {}
    catch
    {}
      

  3.   

    回答你的第二个问题吧。。第一个问题没有遇到过;
    第二个是你在UI的Try中调用BLL时如果发生了异常就会自动跑到与这个Try相对应的Catch中去了...
      

  4.   

    关于错误处理:
    在ObjectDataSource的inserted事件中有一个参数ObjectDataSourceStatusEventArgs,通过e.Exception可以获知是否出错,可以进行处理。
    而删除更新新增等操作也是如此。
      

  5.   

    关于第一个问题:
    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();
    }
     
      

  6.   

    LS回答得够详细了删除还是得手写代码 
    异常就用try/catch
      

  7.   

    感谢5 6楼的朋友,我是lz,我想问问你现在用的是sqldatasource并且用的是SQL语句传递的是基本数据类型,
    哪么如果是用objectdatasource 他需要调用BLL中的方法,而方法需要的是对象 类型的参数怎么办?用sqldatasource我会的。
    但是微软说做3层架构推荐的就是objectdatasource。麻烦再给讲解一下。谢谢了!
      

  8.   

    DataList中,要傳遞的對象需要由你自己構造,然後傳遞給objectDataSource的相關方法(如DeleteMethod),最後執行操作(如調用objdatasource的Delete方法)。
    sqldatasource與objectdatasource的不同是,objectdatasource相關方法要求的對象參數需要由你自己構造,從當前項中讀取賦值。
    這與GridView不同,GridView進行了許多封裝,可以自動處理,但DataList封裝較少,因此性能會更好。