今天初探三层架构,听朋友说SQL语句在三层架构里都是被封装在数据层的,对于这一点我不是很理解,比如:
我如果只是单纯的取数据,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;
        }

    }

}


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

        }

    }

}


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();
        }


        
#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层

这样合理吗?请高手指点.