为数据访问层编写一个基类
来源:互联网 发布:特效制作软件ae 编辑:程序博客网 时间:2024/06/04 23:32
在总结以前的代码以后,决定重构数据方法层的代码。数据访问层无非进行两种操作:查询返回DataTable,进行插入、更新、删除等无返回值的操作。只要增加一个数据访问层基类包含这些繁琐的代码,其余的数据访问层代码继承数据访问层基类,在调用基类函数时给出存储过程名称和存储过程参数即可。
数据访问层基类代码:
using System;
using System.Data;
using System.Collections;
using System.Data.SqlClient;
namespace DAL
{
/// <summary>
/// DALBase 的摘要说明。
/// 数据层访问基类,定义数据层访问公共的变量,方法
/// </summary>
public class DALBase
{
//定义该类共用变量
private SqlConnection conn; //
private SqlCommand mycm; //
private DataSet myds; //
private SqlDataAdapter myda; //
/// <summary>
/// 从web.config中读取数据库连接字符串
/// </summary>
private string CONNSTR = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
public DALBase()
{
//构造函数,创建对象实例
conn = new SqlConnection(CONNSTR);
mycm = conn.CreateCommand();
myds = new DataSet();
myda = new SqlDataAdapter();
}
/// <summary>
/// 通过存储过程返回查询表的信息
/// </summary>
/// <param name="sprocName">存储过程名称</param>
/// <returns>DataTable</returns>
protected DataTable GetTable(string sprocName)
{
conn.Open();
try
{
mycm.CommandText = sprocName;
mycm.CommandType = CommandType.StoredProcedure;
myda.SelectCommand = mycm;
myda.Fill(myds);
}
finally
{
//无论语句执行正确与否,都关闭连接释放资源
conn.Close();
}
return myds.Tables[0];
}
/// <summary>
/// 通过存储过程和参数返回查询表的信息
/// </summary>
/// <param name="sprocName"></param>
/// <param name="parameters"></param>
/// <returns></returns>
protected DataTable GetTable(string sprocName, SqlParameter[] parameters)
{
conn.Open();
try
{
mycm.CommandText = sprocName;
mycm.CommandType = CommandType.StoredProcedure;
SqlParameterCollection sqlParams = mycm.Parameters;
//先清空原有的参数
mycm.Parameters.Clear();
//给Command添加参数
foreach ( SqlParameter parameter in parameters )
{
mycm.Parameters.Add( parameter );
}
myda.SelectCommand = mycm;
myda.Fill(myds);
}
finally
{
//无论语句执行正确与否,都关闭连接释放资源
conn.Close();
}
return myds.Tables[0];
}
/// <summary>
/// 通过存储过程及存储过程参数执行对数据库无返回值的操作(如:新增,更新,删除等)
/// </summary>
/// <param name="sprocName">存储过程名称</param>
/// <param name="parameters">存储过程参数</param>
protected void SaveTale(string sprocName, SqlParameter[] parameters)
{
mycm.CommandText = sprocName;
mycm.CommandType = CommandType.StoredProcedure;
SqlParameterCollection sqlParams = mycm.Parameters;
//先清空原有的参数
mycm.Parameters.Clear();
//给Command添加参数
foreach ( SqlParameter parameter in parameters )
{
mycm.Parameters.Add( parameter );
}
//打开连接
conn.Open();
try
{
//执行
mycm.ExecuteNonQuery();
}
finally
{
//关闭连接
conn.Close();
}
}
}
}
数据访问层代码:
using System;
using System.Data;
using System.Collections;
using System.Data.SqlClient;
namespace DAL
{
public class Test : DALBase
{
public Test()
{
}
public DataTable GetTestTable()
{
return base.GetTable("存储过程名称");
}
public DataTable GetTestTableByXName(string XName)
{
SqlParameter[] parameters = { new SqlParameter( "@XName",SqlDbType.NVarChar,10 ) };
return base.GetTable("存储过程名称",parameters);
}
public void AddTestTable(string XName, string Description)
{
SqlParameter[] parameters =
{
new SqlParameter( "@XName",SqlDbType.NVarChar,10 ),
new SqlParameter( "@Description",SqlDbType.NVarChar,100)
};
//设置参数值
parameters[0].Value = XName;
parameters[1].Value = Description;
base.SaveTale("存储过程名称",parameters);
}
}
}
大家有兴趣还可以帮忙扩充一下这个基类,比如增加通过SQL语句返回DataTable,返回单值结果(如:查询合计)……
- 为数据访问层编写一个基类
- 为数据访问层编写一个基类
- 为数据访问层编写一个基类
- 编写可移植数据访问层
- 编写可移植数据访问层
- 编写可移植数据访问层
- 编写可移植数据访问层
- 编写可移植数据访问层
- 编写可移植数据访问层
- 编写可移植数据访问层
- 编写可移植数据访问层
- 编写可移植数据访问层
- 编写可移植数据访问层
- 一个简单的NET数据访问层操作类
- 一个数据访问层的概要设计
- 一个数据访问层的概要设计
- 模块类 -- 数据访问层
- 数据访问层类示例
- 联想:两条供应链上作战
- SQL语句收藏
- [ZT] Eclipse入门:使用指南
- DirectShow编程(3.4) - 关于DirectShow - Filter Graph中的数据流
- CFO的非财务角色
- 为数据访问层编写一个基类
- stL http://blog.csdn.net/solotony/archive/2004/09/27/118163.aspx
- 搭乘CC-NUMA快车
- 25个实用健康小计谋
- 第一次用博客
- 挺忙
- 触发器基础知识
- pb中创建数据操作日志字典[收藏]
- 带有小计算器的TextBox控件(原创)