最近在学习三层架构,有些地方不是很明白,还请高手写个标准的三层结构的例子,DataGrid或者DataList的都可以,请把代码尽量写得标准写,马上散分了。
解决方案 »
- 置顶帖子变红显示问题
- 100分求asp.net的商业网站源码
- 如何取得 html 代码中 某一个 table 中的 input 集合的 text 值。
- 再提昨天的问题!请白兄和大家进来看一看
- 急急急!!一个显示布局的问题
- 在线等,立马给分!
- 请教远程获取网卡MAC地址的方法
- 那位GGJJ碰到过这种问题,win2003server + vs.net2003 现在突然出现 Debugger user 不是调试组成员,不可以调试了,搜了一个上午了,很急
- 用过ComponentArt菜单控件的请进来.我想弹出无菜单.工具条,地址栏的窗口/
- 请问如何在网页上更新数据库整列的值??
- 存储过程出错,高手指点一下
- 一个大型网站用 CMS 卖多钱?
一、公共基类:
using System;
using System.Data;
using System.Data.SqlClient;namespace WuJian2005.DataAccess
{
///<summary>
///只列出了完成DataGrid绑定所需的相关方法,其它略
///</summary>
public abstract class DBAccess
{
private string connectionstring;
private SqlConnection conn;
private SqlCommand cmd = new SqlCommand();
private SqlDataAdapter da = new SqlDataAdapter();
private DataSet ds = new DataSet();
private DataTable dt = new DataTable(); #region 构造函数
public DBAccess(string input_connectionstring)
{
connectionstring = input_connectionstring;
conn = new SqlConnection(connectionstring);
}
#endregion #region 无参数存储过程创建SqlCommand对象
public SqlCommand BuildSqlCommand (string procedure_name)
{
try
{
cmd = new SqlCommand(procedure_name , conn);
cmd.CommandType = CommandType.StoredProcedure;
return cmd;
}
catch (Exception error)
{
throw error;
}
}
#endregion #region 运行无参数存储过程(SELECT查询),返回一个DataTable
public DataTable RunProcedure (string procedure_name , string table_name)
{
try
{
if(conn.State == ConnectionState.Closed)
{
conn.Open();
}
cmd = this.BuildSqlCommand(procedure_name);
da = new SqlDataAdapter(cmd);
da.Fill(ds,table_name);
return ds.Tables[table_name];
}
catch(Exception error)
{
throw error;
}
finally
{
conn.Close();
}
}
#endregion #region 为DataTable增加序号列(true:递增,false:递减),返回新的DataTable
public DataTable AddNumber(DataTable table_object_name,string column_name,bool direction)
{
try
{
dt = table_object_name;
//增加列
dt.Columns.Add(column_name,System.Type.GetType("System.Int32"));
if(direction == true)
{
//递增赋值
for(int i=0;i<dt.Rows.Count;i++)
{
dt.Rows[i][column_name] = dt.Rows.Count-i;
}
return dt;
}
else
{
//递减赋值
for(int i=dt.Rows.Count;i>0;i--)
{
dt.Rows[i-1][column_name] = i;
}
return dt;
}
}
catch(Exception error)
{
throw error;
}
}
#endregion
}
}二、业务逻辑:
using System;
using System.Data;
using System.Data.SqlClient;namespace WuJian2005.DataAccess
{
/// <summary>
/// AddressList 的摘要说明。
/// </summary>
public class AddressList : WuJian2005.DataAccess.DBAccess
{
#region 构造函数
public AddressList() : base(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"])
{
//
}
#endregion #region 获取DataTable以绑定DataGrid
public DataTable GetAllLinkman ()
{
//返回一个增加了递增序列号的DataTable
return AddNumber(RunProcedure("pro_get_all_linkman","address_list"),"number",true);
}
#endregion
}
}三、UI层:
......
private WuJian2005.DataAccess.AddressList myA = new WuJian2005.DataAccess.AddressList();
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
bindgrid();
}
} private void bindgrid()
{
this.dgrdAddressList.DataSource = myA.GetAllLinkman();
this.dgrdAddressList.DataBind();
}
......
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
yourDataGrid.DataSource = yourClass.获取需要的数据的函数;
yourDataGrid.DataBind();
}
}
2. .cs 文件 public DataTable 获取需要的数据的函数 ()
{
//返回一个某个特定的记录集
return dal.RunStore(存储过程名);
}3.执行存储过程或者查询语句的层public DataTable RunStore(string storeName)
{
方法重略
}
1数据层
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;namespace DBProject.DataGridTest.DbBase
{
/// <summary>
/// Base 的摘要说明。
/// </summary>
public class Base
{
protected static string strConn=ConfigurationSettings.AppSettings["strConnection"];
protected static string strSQL; protected static DataSet ExecuteSql(string strSQL)
{
SqlConnection myCn=new SqlConnection(strConn);
try
{
myCn.Open();
SqlDataAdapter sda=new SqlDataAdapter(strSQL,myCn);
DataSet ds=new DataSet();
sda.Fill(ds);
return ds;
}
catch(System.Data.SqlClient.SqlException ex)
{
throw new Exception(ex.Message);
}
finally
{
myCn.Close();
}
}
}
}
2逻辑层
using System;
using System.Data;
using System.Data.SqlClient;
using DBProject.DataGridTest.DbBase;namespace DBProject
{
/// <summary>
/// Logic 的摘要说明。
/// </summary>
public class Logic:Base
{
public DataSet BindGird()
{
strSQL="select * from authors";
DataSet ds;
ds=ExecuteSql(strSQL);
try
{
return ds;
}
catch
{
throw new Exception("连接错误!");
}
}
}
}
3表现层
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!(Page.IsPostBack))
{
GridBind();
}
} private void GridBind()
{
DataSet myDs;
myDs=myLog.BindGird();
dg_Test.DataSource=myDs;
dg_Test.DataBind();
}
你的表示层中写的SQL算不算数据访问????
这样就不行了。
http://www.81M.Net网页设计超市,你的问题或许里面能找到
Http://Free.81M.Net免费空间站