DataAccessLayer
/************************
* ⾦⾊海洋⼯作室 —— 数据访问层
*
* 数据访问层(SQL Server 版)
*
* 最后修改时间:2006年8⽉15⽇
************************/
using System;
using System.Data;
using System.Data.SqlClient;
using JYK.DataStruct;            //结构,⽤于“实体类”
//using System.Security.Principal;
namespace JYK
{
/// <summary>
/// 存储过程的参数的类型,在输出型的参数⾥使⽤。
/// </summary>
public enum ParameterKind
{
Int,
Double,
Decimal,
NVarChar,
Bit
}
/// <summary>
/// 这是⼀个通⽤的数据访问层接⼝。对ADO.NET的封装。功能类似于 SQLHelper ,但是⽐SQLHelper要简洁和⾼效。    /// </summary>
public sealed class DataAccessLayer
{
#region 属性
private static string errorMsg;                    //出错信息
private static bool isShowErrorSQL;            //是否显⽰出错的查询语句(包括存储过程名程)
private int executeRowCount;                    //获取执⾏SQL查询语句后影响的⾏数
private SqlCommand cm;                            //建⽴Command对象
private SqlTransaction sqlTrans;                //⽤于事务处理
private static bool isUseTrans;                    //是否启⽤了 的事务处理
/// <summary>
/// 读取出错信息
/// </summary>
public string ErrorMsg
{
get { return errorMsg; }
}
/
// <summary>
/// 修改连接字符串,在同时访问两个或两个以上的数据库的时候使⽤
/// </summary>
public string cnString
{
set { cm.Connection.ConnectionString = value; }
get { return cm.Connection.ConnectionString; }
}
/// <summary>
/// 获取执⾏SQL查询语句后影响的⾏数
/// </summary>
public int ExecuteRowCount
{
get { return executeRowCount; }
}
/// <summary>
/// 释放资源
/// </summary>
public void Dispose()
{
if (isUseTrans)
sqlTrans.Dispose();
errorMsg = null;
cm.Parameters.Clear();
cm.Connection.Close();
cm.Dispose();
}
#endregion
public DataAccessLayer()    //构造函数
{
//默认不使⽤事务
isUseTrans = false;
//获取连接字符串
cm = new SqlCommand();
cm.Connection = new SqlConnection("获取连接字符串");
//JYK.Connection.ConnectionString
//初始化错误信息
sqltransaction什么意思
errorMsg = "0";
isShowErrorSQL = true;  //本地运⾏,显⽰出错的查询语句(包括存储过程名程)
//isShowErrorSQL = false; //服务器运⾏,不显⽰出错的查询语句(包括存储过程名程)        }
#region 内部函数
//设置初始值
/// <summary>
/// 设置 errorMsg = "0" ;cm.CommandText 和 cm.CommandType
/
// </summary>
/// <param name="commandText">查询语句或者存储过程</param>
/// <param name="commandType">1:存储过程;2:查询语句</param>
private void SetCommand(string commandText, int commandType)
{
errorMsg = "0";                            //清空错误信息
executeRowCount = 0;
cm.CommandText = commandText;
if (commandType == 1)
cm.CommandType = CommandType.Text;
else
cm.CommandType = CommandType.StoredProcedure;
}
//设置出错信息
/// <summary>
/// 当发⽣异常时,所作的处理
/// </summary>
/// <param name="FunctionName">函数名称</param>
/// <param name="commandText">查询语句或者存储过程</param>
/// <param name="message">错误信息</param>
private void SetErrorMsg(string FunctionName, string commandText, string message)
{
/
/设置返回到上⼀层的错误信息
errorMsg = FunctionName + "函数出现错误。<BR>错误信息:" + message;
if (isShowErrorSQL)
errorMsg += "<BR>查询语句:" + commandText;
if (isUseTrans)
this.TranRollBack();            //事务模式下:回滚事务
cm.Connection.Close();                //关闭连接
addLogErr(commandText, errorMsg);    //记录到错误⽇志
}
#endregion
#region 记录错误⽇志
/
/如果要使⽤的话,根据你的需要进⾏修改。
public void addLogErr(string SPName, string ErrDescribe)
{
//记录到错误⽇志
string FilePath = System.Web.HttpContext.Current.Server.MapPath("/log/" + DateTime.Now.ToString("yyyyMMdd") + ".txt");
System.Text.StringBuilder str = new System.Text.StringBuilder();
str.Append(DateTime.Now.ToString());
str.Append(" ");
str.Append(SPName);
str.Append(" ");
str.Append(ErrDescribe.Replace("<BR>", ""));
str.Append(" ");
System.IO.StreamWriter sw = null;
try
{
sw = new System.IO.StreamWriter(FilePath, true, System.Text.Encoding.Unicode);
sw.Write(str.ToString());
}
catch (Exception ex)
{
System.Web.HttpContext.Current.Response.Write("没有访问⽇志⽂件的权限!或⽇志⽂件只读!");            }
finally
{
if (sw != null)
sw.Close();
}
}
#endregion
//事务⽇志
#region 事务处理部分。并没有做太多的测试,有不合理的地⽅请多指教
/// <summary>
/// 打开连接,并且开始事务。
/// </summary>
public void TranBegin()
{
cm.Connection.Open();
sqlTrans = cm.Connection.BeginTransaction();
cm.Transaction = sqlTrans;
isUseTrans = true;
}
/// <summary>
/// 提交事务,并关闭连接
/// </summary>
public void TranCommit()
{
sqlTrans.Commit();
cm.Connection.Close();
}
/// <summary>
/// 回滚事务,并关闭连接。在程序出错的时候,⾃动调⽤。
/// </summary>
public void TranRollBack()
{
sqlTrans.Rollback();
cm.Connection.Close();
}
#endregion
//查询语句部分
#region 运⾏查询语句返回记录(DataSet、DataTable、DataRow、String[]、String)
/// <summary>
/// 运⾏SQL查询语句 返回DataSet。可以传⼊多条查询语句,返回的DataSet⾥会有多个DataTable        /// </summary>
/// <param name="SQL">查询语句。⽐如select * from tableName</param>
/// <returns>返回DataSet</returns>
#region 函数实现 — — RunSqlDataSet
public DataSet RunSqlDataSet(string SQL)
{
SetCommand(SQL, 1);        //设置command
SqlDataAdapter da = new SqlDataAdapter(cm);
try
{
DataSet DS = new DataSet();
da.Fill(DS);
return DS;
}
catch (Exception ex)
{
SetErrorMsg("RunSqlDataSet", SQL, ex.Message);    //处理错误
return null;
}
finally
{
//⾃动关闭了,不⽤⼿动关闭。
da.Dispose();
}
}
#endregion

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。