使用objectdatasource結合數據綁定控件進行簡單三層架構的開發

轉自:http://blog.csdn.net/srym/archive/2008/04/03/2246926.aspx

 

對於B/S架構的三層架構的開發,可能很多的人都已經瞭解的是比較清楚的。哪麼我在這裏用的是最簡單的三層架構。ui+bll+dal+dbsqlhelp+model.

 

從05出來以後由於功能明顯比03誇張了很多,所以在開發的時候也就很方便。其中以數據的顯示最爲明顯。通過sqldatasource可以幾乎一行代碼都不需要寫,就能在GridView中顯示出來數據,並且進行增刪查改的操作,但是我個人總感覺這樣做是有問題的。因爲使用sqldatasource,就明顯的破壞了3層架構的基本改變。哪麼微軟在05當中,很重點的推出了objectdatasource這個東西,就是專門用來結合三層架構開發的一個數據源綁定控件。 在層次之間傳遞的也是object,這樣相對來說就比較好一些。

代碼在具體的下邊,其實主要就是DataList稍微麻煩一點,別的幾個控件都可以自動 實現增刪查改的功能,所以基本沒什麼寫太多的代碼。!

在這裏主要是DataList的代碼,以操作Jobs表爲示例。

DbSqlHelp

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace DbSqlHelp
{
    
public abstract class DbSqlHelp
    
{
        
static string StrConn = @"User ID=sa;Password=perishryu;Initial Catalog=pubs;Data Source=OATHRYUSQL2005";
        
static SqlDataAdapter da;
        
static SqlCommand cmd;
        
static SqlConnection conn;
        
static DataSet ds;

        
public static  DataSet Search(string sql)
        
{
            
using (da = new SqlDataAdapter(sql, StrConn))
            
{
                
using (ds = new DataSet())
                
{
                    da.Fill(ds);
                    
return ds;
                }

            }

        }

        
public static bool Make(string sql)
        
{
            
using (conn = new SqlConnection(StrConn))
            
{
                
using (cmd = new SqlCommand(sql, conn))
                
{
                    
if (conn.State != ConnectionState.Closed)
                    
{
                        conn.Close();
                    }

                    
try
                    
{
                        conn.Open();
                        cmd.ExecuteNonQuery();
                        
return false;
                    }

                    
catch(System.Exception ex)
                    
{
                        
throw ex;
                    }

                    
finally
                    
{
                        conn.Close();
                    }

                }

            }

        }

    }

}

 

Model

 

using System;
using System.Collections.Generic;
using System.Text;

namespace Model
{
    
public class Job_Model
    
{
        
public Job_Model()
        
{
        }

        
public Job_Model(int id, string desc, int min, int max)
        
{
            
this.job_desc = desc;
            
this.job_id = id;
            
this.min_lvl = min;
            
this.max_lvl = max;
        }

        
int job_id;

        
public int Job_id
        
{
            
get return job_id; }
            
set { job_id = value; }
        }

        
string job_desc;

        
public string Job_desc
        
{
            
get return job_desc; }
            
set { job_desc = value; }
        }

        
int min_lvl;

        
public int Min_lvl
        
{
            
get return min_lvl; }
            
set { min_lvl = value; }
        }

        
int max_lvl;

        
public int Max_lvl
        
{
            
get return max_lvl; }
            
set { max_lvl = value; }
        }

    }

}

DAL

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace DAL
{
    
public class Job_DAL
    
{
        
string sql;
        
public DataSet Select_Job_Dal(string jobid)
        
{
            sql 
= "select * from jobs where job_id='" +jobid + "'";
            
return DbSqlHelp.DbSqlHelp.Search(sql);

        }

        
public DataSet Select_Job_Dal()
        
{
            sql 
= "select * from jobs";
            
return DbSqlHelp.DbSqlHelp.Search(sql);
        }


        
public bool Update_Job_Dal(Model.Job_Model job)
        
{
            sql 
= "update jobs set job_desc='" + job.Job_desc + "',min_lvl='" + job.Min_lvl + "',max_lvl='" + job.Max_lvl + "' where job_id='" + job.Job_id + "'";
            
try
            
{
                
return DbSqlHelp.DbSqlHelp.Make(sql);
            }

            
catch(System.Exception ex)
            
{
                
throw ex;
            }

        }

        
public bool Insert_Job_Dal(Model.Job_Model job)
        
{
            sql 
= "insert into jobs values('" + job.Job_desc + "','" + job.Min_lvl + "','" + job.Max_lvl + "')";
            
try
            
{
                
return DbSqlHelp.DbSqlHelp.Make(sql);
            }

            
catch (System.Exception ex)
            
{
                
throw ex;
            }

            
        }

        
public bool Delete_Job_Dal(Model.Job_Model job)
        
{
            sql 
= "delete from jobs where job_id='" + job.Job_id + "'";
            
try
            
{
                
return DbSqlHelp.DbSqlHelp.Make(sql);
            }

            
catch (System.Exception ex)
            
{
                
throw ex;
            }

            
        }

    }

}

 

BLL

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace BLL
{
    
public class Job_BLL
    
{
        DAL.Job_DAL jobdal;
        
public DataSet Select_BLL()
        
{
            jobdal 
= new DAL.Job_DAL();
            
{
                
return jobdal.Select_Job_Dal();
            }

        }

        
public DataSet Select_BLL(string jobid)
        
{
            jobdal 
= new DAL.Job_DAL();
            
{
                
return jobdal.Select_Job_Dal(jobid);
            }


        }

        
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 ex;
            }

        }

        
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 ex;
            }

        }

        
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 ex;
            }

        }

    }

}

 

UI   aspx頁面

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataListDemo.aspx.cs" Inherits="DataListDemo" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>無標題頁</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:DataList ID="DataList1" runat="server" DataSourceID="ObjectDataSource1" RepeatColumns="4" RepeatDirection="Horizontal" Width="720px" DataKeyField="job_id" OnCancelCommand="DataList1_CancelCommand" OnEditCommand="DataList1_EditCommand" OnUpdateCommand="DataList1_UpdateCommand" OnDeleteCommand="DataList1_DeleteCommand">
            
<ItemTemplate>
                job_id:
<asp:Literal ID="Literal1" runat="server" Text='<%#Eval("job_id") %>'></asp:Literal><br />
                job_desc:
<asp:Literal ID="Literal2" runat="server" Text='<%#Eval("job_desc") %>'></asp:Literal><br />
                min_lvl:
<asp:Literal ID="Literal3" runat="server" Text='<%#Eval("min_lvl") %>'></asp:Literal><br />
                max_lvl:
<asp:Literal ID="Literal4" runat="server" Text='<%#Eval("max_lvl") %>'></asp:Literal><br />
                
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="Edit">編輯</asp:LinkButton>&nbsp;&nbsp;&nbsp;&nbsp;
                
<asp:LinkButton ID="LinkButton2" runat="server" CommandName="delete">刪除</asp:LinkButton>
            
</ItemTemplate>
            
<EditItemTemplate>
                job_id:
<asp:Literal ID="Literal1" runat="server" Text='<%#Eval("job_id") %>'></asp:Literal><br />
                job_desc:
<asp:TextBox ID="TextBox1" runat="server" Text='<%#Bind("job_desc") %>'></asp:TextBox><br />
                min_lvl:
<asp:TextBox ID="TextBox2" runat="server" Text='<%#Bind("min_lvl") %>'></asp:TextBox><br />
                max_lvl:
<asp:TextBox ID="TextBox3" runat="server" Text='<%#Bind("max_lvl") %>'></asp:TextBox><br />
                
<asp:LinkButton ID="LinkButton3" runat="server" CommandName="update">更新</asp:LinkButton>
                
<asp:LinkButton ID="LinkButton4" runat="server" CommandName="cancel">取消</asp:LinkButton>
            
</EditItemTemplate>
           
        
</asp:DataList><asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DataObjectTypeName="Model.Job_Model"
            DeleteMethod
="Delete_BLL" InsertMethod="Insert_BLL" SelectMethod="Select_BLL"
            TypeName
="BLL.Job_BLL" UpdateMethod="Update_BLL" OnUpdating="ObjectDataSource1_Updating" OnDeleting="ObjectDataSource1_Deleting" OnUpdated="ObjectDataSource1_Updated"></asp:ObjectDataSource>
        
<asp:Label ID="Label1" runat="server" Text="Label" Width="280px"></asp:Label>
        
&nbsp;&nbsp;
    
</div>
    
</form>
</body>
</html>

 

UI   CS代碼

 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ComponentModel;

public partial class DataListDemo : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
    }

    
protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
    
{
        
this.DataList1.EditItemIndex = e.Item.ItemIndex;
        DataBind();
    }

    
protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e)
    
{
        
this.DataList1.EditItemIndex = -1;
        DataBind();
    }

    
protected void ObjectDataSource1_Updating(object sender, ObjectDataSourceMethodEventArgs e)
    
{
        ((Model.Job_Model)(e.InputParameters[
0])).Job_id = job.Job_id;
        ((Model.Job_Model)(e.InputParameters[
0])).Job_desc = job.Job_desc;
        ((Model.Job_Model)(e.InputParameters[
0])).Min_lvl = job.Min_lvl;
        ((Model.Job_Model)(e.InputParameters[
0])).Max_lvl = job.Max_lvl;
        
this.DataList1.EditItemIndex = -1;
        DataBind();
    }

    Model.Job_Model job;
    
protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
    
{
        job 
= new Model.Job_Model();
        job.Job_id 
= Convert.ToInt32(((Literal)(this.DataList1.Items[e.Item.ItemIndex].FindControl("Literal1"))).Text);
        job.Job_desc 
= ((TextBox)(this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1"))).Text;
        job.Min_lvl 
= Convert.ToInt32(((TextBox)(this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox2"))).Text);
        job.Max_lvl 
= Convert.ToInt32(((TextBox)(this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox3"))).Text);
        ObjectDataSource1.Update();

    }

    
protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
    
{
        job 
= new Model.Job_Model();
        job.Job_id 
= Convert.ToInt32(((Literal)(this.DataList1.Items[e.Item.ItemIndex].FindControl("Literal1"))).Text);
        ObjectDataSource1.Delete();


    }

    
protected void ObjectDataSource1_Deleting(object sender, ObjectDataSourceMethodEventArgs e)
    
{
        ((Model.Job_Model)(e.InputParameters[
0])).Job_id = job.Job_id;
        DataBind();
    }

    
protected void ObjectDataSource1_Updated(object sender, ObjectDataSourceStatusEventArgs e)
    
{
        
if (e.Exception != null)
        
{
            e.ExceptionHandled 
= true;
            
this.Label1.Text = e.Exception.Message;
        }

    }

}

 其他的數據綁定控件(DetailsView,FormView,GridView),代碼大同小異,他們都可以自動完成增刪改查的功能,所以再這裏就不寫了。如果有朋友有更好的辦法或者建議,可以留言交流一下。需要完整代碼的朋友,可以留下EMAIL。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章