我如果只是单纯的取数据,SQL语句可能是固定的,如
select * from tablename
但,如果是多条件搜索,SQL语句是动态生成的该如何呢?
另外,在数据层里我把一个DataSet类型返回给逻辑层中一个类的属性以供表示层运用,这样做合理吗?
下面是解决方案:
以下是相关代码:
DataBase数据层
using
System;
using System.Data;
using System.Data.OleDb;
namespace LemongTree.DataBases
{
/**//// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Database
{
private string _error;
private string _sql;
public string Error
{
get
{
return this._error;
}
set
{
this._error=value;
}
}
private OleDbConnection objConn;
private OleDbCommand objComm;
private OleDbDataAdapter da;
public Database()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.objComm=null;
this.objConn=null;
this.da=null;
}
public void OpenDb()
{
if(objConn==null)
{
objConn = new OleDbConnection(@"provider=microsoft.jet.oledb.4.0;data source=C:\bbsdb.mdb");
objConn.Open();
}
}
public void CloseDb()
{
if(objConn!=null)
{
if(objConn.State==ConnectionState.Open)
{
objConn.Close();
}
}
}
public DataSet mydst()
{
DataSet dst = new DataSet();
OpenDb();
da = new OleDbDataAdapter("select * from online",objConn);
da.Fill(dst);
return dst;
}
}
}
using System.Data;
using System.Data.OleDb;
namespace LemongTree.DataBases
{
/**//// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Database
{
private string _error;
private string _sql;
public string Error
{
get
{
return this._error;
}
set
{
this._error=value;
}
}
private OleDbConnection objConn;
private OleDbCommand objComm;
private OleDbDataAdapter da;
public Database()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.objComm=null;
this.objConn=null;
this.da=null;
}
public void OpenDb()
{
if(objConn==null)
{
objConn = new OleDbConnection(@"provider=microsoft.jet.oledb.4.0;data source=C:\bbsdb.mdb");
objConn.Open();
}
}
public void CloseDb()
{
if(objConn!=null)
{
if(objConn.State==ConnectionState.Open)
{
objConn.Close();
}
}
}
public DataSet mydst()
{
DataSet dst = new DataSet();
OpenDb();
da = new OleDbDataAdapter("select * from online",objConn);
da.Fill(dst);
return dst;
}
}
}
bll为逻辑层
using
System;
using System.Data;
using System.Data.OleDb;
using LemongTree.DataBases;
namespace LemongTree.BLL
{
/**//// <summary>
/// bll 的摘要说明。
/// </summary>
public class bll
{
private DataView _dst;
private Database db = new Database();
public bll()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public DataView mydst
{
get
{
return (DataView)this.db.mydst().Tables[0].DefaultView;
}
set
{
this._dst=this.db.mydst().Tables[0].DefaultView;
}
}
}
}
using System.Data;
using System.Data.OleDb;
using LemongTree.DataBases;
namespace LemongTree.BLL
{
/**//// <summary>
/// bll 的摘要说明。
/// </summary>
public class bll
{
private DataView _dst;
private Database db = new Database();
public bll()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public DataView mydst
{
get
{
return (DataView)this.db.mydst().Tables[0].DefaultView;
}
set
{
this._dst=this.db.mydst().Tables[0].DefaultView;
}
}
}
}
WebApplication3表现层
using
System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using LemongTree.BLL;
namespace LemongTree.Web
{
/**//// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected Wuqi.Webdiyer.AspNetPager AspNetPager1;
protected bll bl = new bll();
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
FillDGRD();
}
private void FillDGRD()
{
this.DataGrid1.DataSource=bl.mydst;
this.DataGrid1.DataBind();
}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using LemongTree.BLL;
namespace LemongTree.Web
{
/**//// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected Wuqi.Webdiyer.AspNetPager AspNetPager1;
protected bll bl = new bll();
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
FillDGRD();
}
private void FillDGRD()
{
this.DataGrid1.DataSource=bl.mydst;
this.DataGrid1.DataBind();
}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
其中的相互引用有:
bll层引用DataBase层,WebApplication3引用bll层
这样合理吗?请高手指点.