我按照自己的理解模拟了一个三层结构的布局 不过感觉不对 而且运行起来速度比较慢 请达人帮忙指点一下正确方法 先行谢过表层:public partial class test17 : System.Web.UI.Page
{
public string temp_list1, temp_list2, temp_list3;
protected void Page_Load(object sender, EventArgs e)
{ Get_MyData();
}
private void Get_MyData()
{
this.temp_list1 = GetTestString(netdepth.data.DbHelper.GetDataReader());
this.temp_list2 = GetTestString(netdepth.data.DbHelper.GetDataReader());
this.temp_list3 = GetTestString(netdepth.data.DbHelper.GetDataReader());
}
private string GetTestString(MySqlDataReader dr)//模拟逻辑层的业务
{
string temp_string = null;
while (dr.Read())
{ temp_string += dr["z_title"].ToString() + "\n";
temp_string += "<br/>\n";
}
dr.Close(); return temp_string; }
}数据层:namespace netdepth.data
{
/// <summary>
/// 数据访问抽象基础类
/// 模拟数据层中的事务
/// </summary>
public abstract class DbHelper //将类声明为抽象类 使得类无法被实例化
{
private DbHelper() { }
/// <summary>
/// 测试获得一个datareader对象
/// </summary>
/// <returns></returns>
public static MySqlDataReader GetDataReader()
{ MySqlConnection myconnection = new MySqlConnection(netdepth.data.mysqlconnection.GetConnStr1);
myconnection.Open();
MySqlCommand mycommand = new MySqlCommand();
string sql = "select * from test111 order by z_id desc";
mycommand.Connection = myconnection;
mycommand.CommandText = sql;
MySqlDataReader dr;
dr = mycommand.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
} }
}
{
public string temp_list1, temp_list2, temp_list3;
protected void Page_Load(object sender, EventArgs e)
{ Get_MyData();
}
private void Get_MyData()
{
this.temp_list1 = GetTestString(netdepth.data.DbHelper.GetDataReader());
this.temp_list2 = GetTestString(netdepth.data.DbHelper.GetDataReader());
this.temp_list3 = GetTestString(netdepth.data.DbHelper.GetDataReader());
}
private string GetTestString(MySqlDataReader dr)//模拟逻辑层的业务
{
string temp_string = null;
while (dr.Read())
{ temp_string += dr["z_title"].ToString() + "\n";
temp_string += "<br/>\n";
}
dr.Close(); return temp_string; }
}数据层:namespace netdepth.data
{
/// <summary>
/// 数据访问抽象基础类
/// 模拟数据层中的事务
/// </summary>
public abstract class DbHelper //将类声明为抽象类 使得类无法被实例化
{
private DbHelper() { }
/// <summary>
/// 测试获得一个datareader对象
/// </summary>
/// <returns></returns>
public static MySqlDataReader GetDataReader()
{ MySqlConnection myconnection = new MySqlConnection(netdepth.data.mysqlconnection.GetConnStr1);
myconnection.Open();
MySqlCommand mycommand = new MySqlCommand();
string sql = "select * from test111 order by z_id desc";
mycommand.Connection = myconnection;
mycommand.CommandText = sql;
MySqlDataReader dr;
dr = mycommand.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
} }
}
谢谢 jyk 你长期qq隐身啊~~~ 呵呵 回头qq见到你 请教一下..
1.DAL层:(一般不要使用静态方法,除非经常调用的方法,为方便调用才使用)
namespace netdepth.data
{
public class DbHelper
{
private DbHelper() { }
public MySqlDataReader GetDataReader()
{
MySqlConnection myconnection = new MySqlConnection(netdepth.data.mysqlconnection.GetConnStr1);
myconnection.Open();
MySqlCommand mycommand = new MySqlCommand();
string sql = "select * from test111 order by z_id desc";
mycommand.Connection = myconnection;
mycommand.CommandText = sql;
MySqlDataReader dr;
dr = mycommand.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
}
}
BLL层:
namespace netdepth.bll
{
public class DbHelper
{
netdepth.data.DbHelper dh=new netdepth.data.DbHelper();
public MySqlDataReader GetDataReader()
{
retur dh.GetDataReader();
}
}
}
UI层:
public partial class test17 : System.Web.UI.Page
{ netdepth.bll.DbHelper dh=new netdepth.bll.DbHelper();
string temp_list1, temp_list2, temp_list3;
protected void Page_Load(object sender, EventArgs e)
{
Get_MyData();
}
private void Get_MyData()
{
this.temp_list1 = GetTestString(dh.GetDataReader());
this.temp_list2 = GetTestString(dh.GetDataReader());
this.temp_list3 = GetTestString(dh.GetDataReader());
}
private string GetTestString(MySqlDataReader dr)//模拟逻辑层的业务
{
string temp_string = null;
while (dr.Read())
{
temp_string += dr["z_title"].ToString() + "\n";
temp_string += " <br/>\n";
}
dr.Close();
return temp_string;
}
}
你的分层很混乱,简单的说业务逻辑层应该归到数据访问层,然后你再找自己的业务逻辑。
关与18楼DBHepler本来就是应用结构化的思想的来的,因为访问数据库的方法就那么几个,所以就抽出来写在DBHepler里。
而要想方便的移植数据库,那应用抽象工厂模式和依赖注入技术很方便实现,也很好用。