[原创].Net下的数据访问层DAL
前几天正好解决了个通用数据持久访问层,特此拿出来奉献下~~~鲜花的鲜花,鸡蛋的鸡蛋~~~嘿嘿!
note 2: 以下是第二版 2007.10.17
增加了事务处理;
增加ExecuteScalr查询单个结果;
支持命令文本执行方式;
支持存储过程调用方式;
支持命令文本+存储过程混合调用方式(不提倡);
特点:
1。适合中小企业数据访问架构,其实大架构也没问题的,毕竟数据处理都放在了DB Server;
2。使用的数据工厂和泛型反射工厂,所以,支持目前所有的数据库系统,只要改改web.config就搞定了;
3。使用HashTable做条件字段的传输操作,并将值一个个传递给sp;
4。支持:获取数据集;添加数据(有返回结果);删除数据(有返回结果);
还有哦,这些是Ez原创的,转载请声明哦~~~
note1 : 以下是第一版V0.1
note1 : 以下是第一版V0.1
using System;
using System.Data;//数据集
using System.Configuration;//连接字符串
using System.Collections;//数据字典
using System.Data.Common;//数据工厂
///
/// DBOperate 的摘要说明
/// Author:Ez
/// Date:2007-04-28
/// E-mail:zhaojun_free@hotmail.com
///
public class DBOperate
{
public DBOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
数据连接操作
///
/// 获取数据集,传入存储过程名strSPName + 条件组合htTemp
///
///
///
///
public DataSet GetData(string strSPName, Hashtable htTemp)
{
DataSet dsGetData = new DataSet();
try
{
using (DbConnection conn = this.GetDBConn())
{
DbCommand cmd = this.GetDBFactory().CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = strSPName;
if (htTemp != null)
{
foreach (DictionaryEntry deTemp in htTemp)
{
DbParameter param = this.GetDBFactory().CreateParameter();
param.ParameterName = deTemp.Key.ToString();
param.Value = deTemp.Value.ToString();
cmd.Parameters.Add(param);
}
}
DbDataAdapter da = this.GetDBFactory().CreateDataAdapter();
da.SelectCommand = cmd;
da.SelectCommand.Connection = conn;
da.Fill(dsGetData);
}
}
catch (Exception e)
{
throw new Exception("Fail to execute query: " + strSPName + ", Error:" + e.Message);
}
finally
{
dsGetData.Dispose();
}
return dsGetData;
}
///
/// 执行记录的插入、删除操作,返回值为Int
/// 1:操作成功;0:操作失败;
///
///
///
///
public int ExecuteSP(string strSPName,Hashtable htTemp)
{
try
{
using (DbConnection conn = this.GetDBConn())
{
conn.Open();
DbCommand cmd = this.GetDBFactory().CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = strSPName;
cmd.Connection = conn;
if (htTemp != null)
{
foreach (DictionaryEntry deTemp in htTemp)
{
DbParameter param = this.GetDBFactory().CreateParameter();
param.ParameterName = deTemp.Key.ToString();
param.Value = deTemp.Value.ToString();
cmd.Parameters.Add(param);
}
}
int iResult = cmd.ExecuteNonQuery();
return iResult;;
}
}
catch(Exception e)
{
throw new Exception("Fail to Execute SP:"+strSPName+",Error:"+e.Message);
}
}
}
using System.Data;//数据集
using System.Configuration;//连接字符串
using System.Collections;//数据字典
using System.Data.Common;//数据工厂
///
/// DBOperate 的摘要说明
/// Author:Ez
/// Date:2007-04-28
/// E-mail:zhaojun_free@hotmail.com
///
public class DBOperate
{
public DBOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
数据连接操作
///
/// 获取数据集,传入存储过程名strSPName + 条件组合htTemp
///
///
///
///
public DataSet GetData(string strSPName, Hashtable htTemp)
{
DataSet dsGetData = new DataSet();
try
{
using (DbConnection conn = this.GetDBConn())
{
DbCommand cmd = this.GetDBFactory().CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = strSPName;
if (htTemp != null)
{
foreach (DictionaryEntry deTemp in htTemp)
{
DbParameter param = this.GetDBFactory().CreateParameter();
param.ParameterName = deTemp.Key.ToString();
param.Value = deTemp.Value.ToString();
cmd.Parameters.Add(param);
}
}
DbDataAdapter da = this.GetDBFactory().CreateDataAdapter();
da.SelectCommand = cmd;
da.SelectCommand.Connection = conn;
da.Fill(dsGetData);
}
}
catch (Exception e)
{
throw new Exception("Fail to execute query: " + strSPName + ", Error:" + e.Message);
}
finally
{
dsGetData.Dispose();
}
return dsGetData;
}
///
/// 执行记录的插入、删除操作,返回值为Int
/// 1:操作成功;0:操作失败;
///
///
///
///
public int ExecuteSP(string strSPName,Hashtable htTemp)
{
try
{
using (DbConnection conn = this.GetDBConn())
{
conn.Open();
DbCommand cmd = this.GetDBFactory().CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = strSPName;
cmd.Connection = conn;
if (htTemp != null)
{
foreach (DictionaryEntry deTemp in htTemp)
{
DbParameter param = this.GetDBFactory().CreateParameter();
param.ParameterName = deTemp.Key.ToString();
param.Value = deTemp.Value.ToString();
cmd.Parameters.Add(param);
}
}
int iResult = cmd.ExecuteNonQuery();
return iResult;;
}
}
catch(Exception e)
{
throw new Exception("Fail to Execute SP:"+strSPName+",Error:"+e.Message);
}
}
}
note 2: 以下是第二版 2007.10.17
增加了事务处理;
增加ExecuteScalr查询单个结果;
支持命令文本执行方式;
支持存储过程调用方式;
支持命令文本+存储过程混合调用方式(不提倡);
using System;
using System.Data;//数据集
using System.Configuration;//连接字符串
using System.Collections;//数据字典,Hashtable
using System.Data.Common;//数据工厂
/// DBHelper 的摘要说明
/// Author:Ez.Zhao
/// Date:2007-04-28
/// Updated: Ez.Zhao(2007.-10.4),Ez.Zhao(2007.-10.15)
/// Blog:http://ez.zhao.cnblogs.com/
/// E-mail:zhaojun_free@hotmail.com
namespace CompanyName.DBHelper
{
public class DBHelper
{
// 创建数据工厂、数据链接
数据连接操作
// 获取数据集
/// <summary>
/// if htTemp == null, then Execute Text
/// if (htTemp != null && htTemp.Count>0), then SP will add Parameters, else no Parameters for SP
/// </summary>
/// <param name="strExecuteString"></param>
/// <param name="htTemp"></param>
/// <returns></returns>
public DataSet GetDataSet(string strExecuteString, Hashtable htTemp)
{
DataSet dsGetData = new DataSet();
try
{
using (DbConnection conn = this.GetDBConn())
{
DbCommand cmd = this.GetDBFactory().CreateCommand();
cmd.CommandText = strExecuteString;
if (htTemp != null)
{
// Execute SP
cmd.CommandType = CommandType.StoredProcedure;
foreach (DictionaryEntry deTemp in htTemp)
{
DbParameter param = this.GetDBFactory().CreateParameter();
param.ParameterName = deTemp.Key.ToString();
param.Value = deTemp.Value.ToString();
cmd.Parameters.Add(param);
}
}
else
{
// Execute Text String
cmd.CommandType = CommandType.Text;
}
DbDataAdapter da = this.GetDBFactory().CreateDataAdapter();
da.SelectCommand = cmd;
da.SelectCommand.Connection = conn;
da.Fill(dsGetData);
}
}
catch (Exception e)
{
throw new Exception("Fail to execute query: " + strExecuteString + ", Error:" + e.Message);
}
finally
{
if (dsGetData != null)
dsGetData.Dispose();
}
return dsGetData;
}
// ExecuteScalar: 获取第一行第一列object对象 传入操作命令字符串
/// <summary>
/// if htTemp == null, then Execute Text
/// if (htTemp != null && htTemp.Count>0), then SP will add Parameters, else no Parameters for SP
/// </summary>
/// <param name="strExecuteString"></param>
/// <param name="htTemp"></param>
/// <returns></returns>
public object ExecuteScalarByString(string strExecuteString,Hashtable htTemp)
{
object obj;
try
{
using (DbConnection conn = this.GetDBConn())
{
conn.Open();
DbCommand cmd = this.GetDBFactory().CreateCommand();
cmd.CommandText = strExecuteString;
cmd.Connection = conn;
if (htTemp != null)
{
// Execute SP
cmd.CommandType = CommandType.StoredProcedure;
foreach (DictionaryEntry deTemp in htTemp)
{
DbParameter param = this.GetDBFactory().CreateParameter();
param.ParameterName = deTemp.Key.ToString();
param.Value = deTemp.Value.ToString();
cmd.Parameters.Add(param);
}
}
else
{
// Execute Text String
cmd.CommandType = CommandType.Text;
}
obj = cmd.ExecuteScalar();
conn.Close();
return obj;
}
}
catch (Exception e)
{
throw new Exception("Fail to execute string query: " + strExecuteString + ", Error:" + e.Message);
}
}
// 单命令执行:插入、删除、更新 操作,返回值为Int,传入strExecuteString + 条件组合htTemp
/// <summary>
/// if htTemp == null, then Execute Text
/// if (htTemp != null && htTemp.Count>0), then SP will add Parameters, else no Parameters for SP
/// </summary>
/// <param name="strExecuteString"></param>
/// <param name="htTemp"></param>
/// <returns></returns>
public int ExecuteWithoutTran(string strExecuteString, Hashtable htTemp)
{
try
{
using (DbConnection conn = this.GetDBConn())
{
conn.Open();
DbCommand cmd = this.GetDBFactory().CreateCommand();
cmd.CommandText = strExecuteString;
cmd.Connection = conn;
if (htTemp != null)
{
// Execute Procedure
cmd.CommandType = CommandType.StoredProcedure;
foreach (DictionaryEntry deTemp in htTemp)
{
DbParameter param = this.GetDBFactory().CreateParameter();
param.ParameterName = deTemp.Key.ToString();
param.Value = deTemp.Value.ToString();
cmd.Parameters.Add(param);
}
}
else
{
// Execute Text Execute
cmd.CommandType = CommandType.Text;
}
int iResult = cmd.ExecuteNonQuery();
conn.Close();
return iResult; ;
}
}
catch (Exception e)
{
throw new Exception("Fail to Execute SP:" + strExecuteString + ",Error:" + e.Message);
}
}
// 组合命令执行:事务操作 插入、删除、更新 操作,返回值为Int,传入操作字符htTemp
/// <summary>
/// if htTemp == null, then Execute Text
/// if (htTemp != null && htTemp.Count>0), then SP will add Parameters, else no Parameters for SP
/// </summary>
/// <param name="htTemp"></param>
/// <returns></returns>
public int ExecteWithTran(Hashtable htTemp)
{
using (DbConnection conn = this.GetDBConn())
{
conn.Open();
DbTransaction tran = conn.BeginTransaction();
DbCommand cmd = this.GetDBFactory().CreateCommand();
cmd.Transaction = tran;
cmd.Connection = conn;
int iResult = 0;
string strResult = string.Empty;
Hashtable htSPNameValue = null;
try
{
if (htTemp != null)
{
foreach (DictionaryEntry de in htTemp)
{
if (de.Value!=null)
{
//Execute SP
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText =Convert.ToString(de.Key);
if (!de.Value.Equals(string.Empty))
{
// got some params
htSPNameValue = (Hashtable)(de.Value);
foreach (DictionaryEntry deSP in htSPNameValue)
{
DbParameter param = this.GetDBFactory().CreateParameter();
param.ParameterName = deSP.Key.ToString();
param.Value = deSP.Value.ToString();
cmd.Parameters.Add(param);
}
}
iResult = cmd.ExecuteNonQuery();
strResult = strResult + "the affected rows count is: " + iResult + "||||||||||";
}
else
{
// Execute Text
cmd.CommandType = CommandType.Text;
cmd.CommandText = Convert.ToString(de.Key);
iResult = cmd.ExecuteNonQuery();
strResult = strResult + "the affected rows count is: " + iResult + "||||||||||";
}
}
}
else
{
strResult = " no input";
}
tran.Commit();
}
catch (Exception e)
{
tran.Rollback();
throw new Exception("Fail to Execute String Command:" + ",Error:" + e.Message);
}
conn.Close();
return iResult;
}
}
}
}
using System.Data;//数据集
using System.Configuration;//连接字符串
using System.Collections;//数据字典,Hashtable
using System.Data.Common;//数据工厂
/// DBHelper 的摘要说明
/// Author:Ez.Zhao
/// Date:2007-04-28
/// Updated: Ez.Zhao(2007.-10.4),Ez.Zhao(2007.-10.15)
/// Blog:http://ez.zhao.cnblogs.com/
/// E-mail:zhaojun_free@hotmail.com
namespace CompanyName.DBHelper
{
public class DBHelper
{
// 创建数据工厂、数据链接
数据连接操作
// 获取数据集
/// <summary>
/// if htTemp == null, then Execute Text
/// if (htTemp != null && htTemp.Count>0), then SP will add Parameters, else no Parameters for SP
/// </summary>
/// <param name="strExecuteString"></param>
/// <param name="htTemp"></param>
/// <returns></returns>
public DataSet GetDataSet(string strExecuteString, Hashtable htTemp)
{
DataSet dsGetData = new DataSet();
try
{
using (DbConnection conn = this.GetDBConn())
{
DbCommand cmd = this.GetDBFactory().CreateCommand();
cmd.CommandText = strExecuteString;
if (htTemp != null)
{
// Execute SP
cmd.CommandType = CommandType.StoredProcedure;
foreach (DictionaryEntry deTemp in htTemp)
{
DbParameter param = this.GetDBFactory().CreateParameter();
param.ParameterName = deTemp.Key.ToString();
param.Value = deTemp.Value.ToString();
cmd.Parameters.Add(param);
}
}
else
{
// Execute Text String
cmd.CommandType = CommandType.Text;
}
DbDataAdapter da = this.GetDBFactory().CreateDataAdapter();
da.SelectCommand = cmd;
da.SelectCommand.Connection = conn;
da.Fill(dsGetData);
}
}
catch (Exception e)
{
throw new Exception("Fail to execute query: " + strExecuteString + ", Error:" + e.Message);
}
finally
{
if (dsGetData != null)
dsGetData.Dispose();
}
return dsGetData;
}
// ExecuteScalar: 获取第一行第一列object对象 传入操作命令字符串
/// <summary>
/// if htTemp == null, then Execute Text
/// if (htTemp != null && htTemp.Count>0), then SP will add Parameters, else no Parameters for SP
/// </summary>
/// <param name="strExecuteString"></param>
/// <param name="htTemp"></param>
/// <returns></returns>
public object ExecuteScalarByString(string strExecuteString,Hashtable htTemp)
{
object obj;
try
{
using (DbConnection conn = this.GetDBConn())
{
conn.Open();
DbCommand cmd = this.GetDBFactory().CreateCommand();
cmd.CommandText = strExecuteString;
cmd.Connection = conn;
if (htTemp != null)
{
// Execute SP
cmd.CommandType = CommandType.StoredProcedure;
foreach (DictionaryEntry deTemp in htTemp)
{
DbParameter param = this.GetDBFactory().CreateParameter();
param.ParameterName = deTemp.Key.ToString();
param.Value = deTemp.Value.ToString();
cmd.Parameters.Add(param);
}
}
else
{
// Execute Text String
cmd.CommandType = CommandType.Text;
}
obj = cmd.ExecuteScalar();
conn.Close();
return obj;
}
}
catch (Exception e)
{
throw new Exception("Fail to execute string query: " + strExecuteString + ", Error:" + e.Message);
}
}
// 单命令执行:插入、删除、更新 操作,返回值为Int,传入strExecuteString + 条件组合htTemp
/// <summary>
/// if htTemp == null, then Execute Text
/// if (htTemp != null && htTemp.Count>0), then SP will add Parameters, else no Parameters for SP
/// </summary>
/// <param name="strExecuteString"></param>
/// <param name="htTemp"></param>
/// <returns></returns>
public int ExecuteWithoutTran(string strExecuteString, Hashtable htTemp)
{
try
{
using (DbConnection conn = this.GetDBConn())
{
conn.Open();
DbCommand cmd = this.GetDBFactory().CreateCommand();
cmd.CommandText = strExecuteString;
cmd.Connection = conn;
if (htTemp != null)
{
// Execute Procedure
cmd.CommandType = CommandType.StoredProcedure;
foreach (DictionaryEntry deTemp in htTemp)
{
DbParameter param = this.GetDBFactory().CreateParameter();
param.ParameterName = deTemp.Key.ToString();
param.Value = deTemp.Value.ToString();
cmd.Parameters.Add(param);
}
}
else
{
// Execute Text Execute
cmd.CommandType = CommandType.Text;
}
int iResult = cmd.ExecuteNonQuery();
conn.Close();
return iResult; ;
}
}
catch (Exception e)
{
throw new Exception("Fail to Execute SP:" + strExecuteString + ",Error:" + e.Message);
}
}
// 组合命令执行:事务操作 插入、删除、更新 操作,返回值为Int,传入操作字符htTemp
/// <summary>
/// if htTemp == null, then Execute Text
/// if (htTemp != null && htTemp.Count>0), then SP will add Parameters, else no Parameters for SP
/// </summary>
/// <param name="htTemp"></param>
/// <returns></returns>
public int ExecteWithTran(Hashtable htTemp)
{
using (DbConnection conn = this.GetDBConn())
{
conn.Open();
DbTransaction tran = conn.BeginTransaction();
DbCommand cmd = this.GetDBFactory().CreateCommand();
cmd.Transaction = tran;
cmd.Connection = conn;
int iResult = 0;
string strResult = string.Empty;
Hashtable htSPNameValue = null;
try
{
if (htTemp != null)
{
foreach (DictionaryEntry de in htTemp)
{
if (de.Value!=null)
{
//Execute SP
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText =Convert.ToString(de.Key);
if (!de.Value.Equals(string.Empty))
{
// got some params
htSPNameValue = (Hashtable)(de.Value);
foreach (DictionaryEntry deSP in htSPNameValue)
{
DbParameter param = this.GetDBFactory().CreateParameter();
param.ParameterName = deSP.Key.ToString();
param.Value = deSP.Value.ToString();
cmd.Parameters.Add(param);
}
}
iResult = cmd.ExecuteNonQuery();
strResult = strResult + "the affected rows count is: " + iResult + "||||||||||";
}
else
{
// Execute Text
cmd.CommandType = CommandType.Text;
cmd.CommandText = Convert.ToString(de.Key);
iResult = cmd.ExecuteNonQuery();
strResult = strResult + "the affected rows count is: " + iResult + "||||||||||";
}
}
}
else
{
strResult = " no input";
}
tran.Commit();
}
catch (Exception e)
{
tran.Rollback();
throw new Exception("Fail to Execute String Command:" + ",Error:" + e.Message);
}
conn.Close();
return iResult;
}
}
}
}