sqlce访问基础类

using System;
using System.Data;
using System.Collections;
using System.Data.SqlServerCe;


namespace SystemDB
{
	#region 数据库访问接口
	public interface IDataAccess
	{
		#region 属性
		/// <summary>
		/// 连接字符串
		/// </summary>
		string ConnectionString
		{
			get;
			set;
		}
		#endregion

		#region 方法
		/// <summary>
		/// 打开连接
		/// </summary>
		void Open();

		/// <summary>
		/// 关闭连接
		/// </summary>
		void Close();

		/// <summary>
		/// 执行命令
		/// </summary>
		/// <param name="CommandString">命令字符串</param>
		/// <param name="Paras">命令所带参数的数组</param>
		int ExcuteCommand(string CommandString, IDataParameter[] Paras);

		/// <summary>
		/// 查询执行命令获取数据记录集
		/// </summary>
		/// <param name="SelectCommandString">查询命令字符串</param>
		/// <param name="TableName">查询表名</param>
		/// <param name="Paras">查询命令所带参数的数组</param>
		/// <returns>执行查询命令获取的数据记录集</returns>
		int GetDataSetFromExcuteCommand(string SelectCommandString, string TableName, IDataParameter[] Paras, ref DataSet ds);
		
		/// <summary>
		/// 查询执行命令获取数据记录集用于分页
		/// </summary>
		/// <param name="SelectCommandString">查询命令字符串</param>
		/// <param name="TableName">查询表名</param>
		/// <param name="Paras">查询命令所带参数的数组</param>
		/// <returns>执行查询命令获取的数据记录集</returns>
		int GetDataSetFromExcuteCommandForPageCount(string SelectCommandString, string TableName, IDataParameter[] Paras, ref DataSet ds,int startRecord,int maxRecord);

		/// <summary>
		/// 执行存储过程
		/// </summary>
		/// <param name="ProcName">存储过程名</param>
		/// <param name="Paras">存储过程所带参数的数组</param>
		int ExcuteProc(string ProcName, IDataParameter[] Paras);
		/// <summary>
		/// 执行存储过程
		/// </summary>
		/// <param name="ProcName">存储过程名</param>
		/// <param name="Paras">存储过程所带参数的数组</param>
		/// <param name="a">返回所影响的行数</param>
		/// <returns></returns>
		int ExcuteProc(string ProcName, IDataParameter[] Paras, ref int a);

		/// <summary>
		/// 执行查询存储过程获取数据记录集
		/// </summary>
		/// <param name="SelectProcName">查询存储过程名</param>
		/// <param name="TableName">查询表名</param>
		/// <param name="Paras">查询存储过程所带参数的数组</param>
		/// <returns>执行查询存储过程获取的数据记录集</returns>
		int GetDataSetFromExcuteProc(string SelectProcName, string TableName, IDataParameter[] Paras, ref DataSet ds);

		/// <summary>
		/// 执行命令获取第一行第一列的值
		/// </summary>
		/// <param name="CommandString">命令字符串</param>
		/// <param name="Paras">命令所带参数的数组</param>
		/// <returns>第一行第一列的值</returns>
		object ExecuteCommandScalar(string CommandString, IDataParameter[] Paras);

		/// <summary>
		/// 执行存储过程获取第一行第一列的值
		/// </summary>
		/// <param name="ProcName">存储过程名</param>
		/// <param name="Paras">存储过程所带参数的数组</param>
		/// <returns>第一行第一列的值</returns>
		object ExecuteProcScalar(string ProcName, IDataParameter[] Paras);

		/// <summary>
		/// 执行命令获取数据读取器
		/// </summary>
		/// <param name="SelectCommandString">查询命令字符串</param>
		/// <param name="Paras">查询命令所带参数的数组</param>
		/// <returns>数据读取器</returns>
		int GetDataReaderFromExcuteCommand(string SelectCommandString, IDataParameter[] Paras, ref IDataReader Reader);

		/// <summary>
		/// 执行存储过程获取数据读取器
		/// </summary>
		/// <param name="SelectCommandString">查询存储过程名</param>
		/// <param name="Paras">查询存储过程所带参数的数组</param>
		/// <returns>数据读取器</returns>
        int GetDataReaderFromExcuteProc(string SelectProcName, IDataParameter[] Paras, ref IDataReader Reader);
		#endregion
	}
	#endregion

    #region SQL Server CE 数据库访问类
    public class SqlCeAccess : IDataAccess
    {
		#region SQL数据库访问构造方法
		/// <summary>
		/// 无参SQL数据库访问构造方法
		/// </summary>
		public SqlCeAccess()
		{
			strConn = "";
			conn = new SqlCeConnection();
		}

		/// <summary>
		/// 有参SQL数据库访问构造方法
		/// </summary>
		/// <param name="ConnectionString">数据库连接字符串</param>
        public SqlCeAccess(string ConnectionString)
		{
			strConn = ConnectionString;
            conn = new SqlCeConnection(strConn);
		}
		#endregion

        #region SQL数据库方法类字段
        private string strConn;		// 数据库连接字符串
        private SqlCeConnection conn;	// 数据库连接对象
        public SqlCeConnection P_conn
        {
            get
            {
                return conn;
            }
        }

        private SqlCeTransaction trans;//事物对象
        #endregion

        #region 命令文本类型枚举
        private enum CommandTextType	// 命令文本类型
        {
            Command,	// 命令
            Procedure	// 存储过程
        }
        #endregion

        #region 获取命令对象
        /// <summary>
        /// 获取命令对象
        /// </summary>
        /// <param name="CommandText">命令文本</param>
        /// <param name="Type">命令文本类型</param>
        /// <param name="Paras">命令文本所带参数</param>
        /// <returns>命令对象</returns>
        private SqlCeCommand GetCommand(string CommandText, CommandTextType Type, IDataParameter[] Paras)
        {
            SqlCeCommand cmd = new SqlCeCommand(CommandText, conn);	// 生成命令对象

            switch (Type)				// 指定命令类型
            {
                case CommandTextType.Command:
                    cmd.CommandType = CommandType.Text;
                    break;
                case CommandTextType.Procedure:
                    cmd.CommandType = CommandType.StoredProcedure;
                    break;
            }

            if (Paras != null)		// 为命令添加参数
            {
                foreach (IDataParameter Para in Paras)
                {
                    cmd.Parameters.Add(Para);
                }
            }

            return cmd;
        }
        #endregion

        #region 执行命令获取第一行第一列的数据
        /// <summary>
        /// 执行命令获取第一行第一列的数据
        /// </summary>
        /// <param name="cmd"></param>
        /// <returns></returns>
        private object GetScalar(SqlCeCommand cmd)
        {
            object obj = null;
            try
            {
                Open();						// 打开连接
                trans = conn.BeginTransaction();
                cmd.Transaction = trans;
                obj = cmd.ExecuteScalar();	// 执行命令获取第一行第一列数据		
                trans.Commit();
                return obj;
            }
            catch (Exception exp)
            {
                trans.Rollback();
                return -1;
            }
            finally
            {
                Close();					// 关闭连接
            }
        }
        #endregion

        #region 获取数据读取器
        /// <summary>
        /// 获取数据读取器
        /// </summary>
        /// <param name="cmd">命令对象</param>
        /// <returns>数据读取器</returns>
        private int GetDataReader(SqlCeCommand cmd, ref IDataReader Reader)
        {
            try
            {
                Open();							// 打开连接
                //trans = conn.BeginTransaction();
                //cmd.Transaction = trans;
                Reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);	// 获取数据读取器
                //trans.Commit();
                return 0;
            }
            catch (Exception exp)
            {
                //trans.Rollback();
                return -1;
            }
        }
        #endregion

        #region IDataAccess 成员

        #region 数据库连接字符串属性
        public string ConnectionString
        {
            get
            {
                return strConn;
            }
            set
            {
                strConn = value;
                conn.ConnectionString = strConn;
            }
        }
        #endregion

        #region 打开关闭
        public void Open()
        {
            try
            {
                if (conn.State != ConnectionState.Open)	// 判断数据库连接状态是否打开
                {
                    conn.Open();							// 打开数据库连接
                }
            }
            catch (Exception exp)
            {
                throw (new Exception("打开数据库连接错误:" + exp.Message));
            }
        }

        public void Close()
        {
            // TODO:  添加 SqlAccess.Close 实现
            try
            {
                if (conn.State != ConnectionState.Closed)	// 判断数据库连接是否关闭
                {
                    conn.Close();							// 关闭数据库连接
                }
                trans.Dispose();
            }
            catch (Exception exp)
            {
                throw (new Exception("关闭数据库连接错误:" + exp.Message));
            }
        }
        #endregion

        #region 执行命令
        /// <summary>
        /// 执行命令
        /// </summary>
        /// <param name="CommandString">命令字符串</param>
        /// <param name="Paras">命令所带参数的数组</param>
        public int ExcuteCommand(string CommandString, IDataParameter[] Paras)
        {
            // TODO:  添加 SqlAccess.ExcuteCommand 实现
            SqlCeCommand cmd = GetCommand(CommandString, CommandTextType.Command, Paras);	// 获取命令

            try
            {
                Open();						// 打开连接
                trans = conn.BeginTransaction(); //建立事物
                cmd.Transaction = trans;      //记录点
                cmd.ExecuteNonQuery();		// 执行命令


                trans.Commit();            //提交
                return 0;
            }
            catch (Exception exp)
            {
                trans.Rollback();       //回滚
                return -1;
            }
            finally
            {
                Close();					// 关闭连接
            }

        }
        #endregion

        #region 查询执行命令获取数据记录集
        /// <summary>
        /// 查询执行命令获取数据记录集
        /// </summary>
        /// <param name="SelectCommandString">查询命令字符串</param>
        /// <param name="TableName">查询表名</param>
        /// <param name="Paras">查询命令所带参数的数组</param>
        /// <returns>执行查询命令获取的数据记录集</returns>
        public int GetDataSetFromExcuteCommand(string SelectCommandString, string TableName, IDataParameter[] Paras, ref DataSet ds)
        {
            // TODO:  添加 SqlAccess.GetDataSetFromExcuteCommand 实现
            SqlCeCommand cmd = GetCommand(SelectCommandString, CommandTextType.Command, Paras);	// 获取命令

            try
            {
                Open();
                trans = conn.BeginTransaction();
                cmd.Transaction = trans;
                SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);									// 创建数据适配器
                da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
                //da.FillSchema(ds, SchemaType.Source, TableName);
                da.Fill(ds, TableName);				// 数据适配器填充数据记录集

                trans.Commit();
                return 0;
            }
            catch (Exception exp)
            {
                trans.Rollback();
                return -1;
            }
            finally
            {
                Close();					// 关闭连接
            }
        }
        #endregion

        #region 查询执行命令获取数据记录集用于分页
        /// <summary>
        /// 查询执行命令获取数据记录集用于分页
        /// </summary>
        /// <param name="SelectCommandString">查询命令字符串</param>
        /// <param name="TableName">查询表名</param>
        /// <param name="Paras">查询命令所带参数的数组</param>
        /// <returns>执行查询命令获取的数据记录集</returns>
        public int GetDataSetFromExcuteCommandForPageCount(string SelectCommandString, string TableName, IDataParameter[] Paras, ref DataSet ds, int startRecord, int maxRecord)
        {
            // TODO:  添加 SqlAccess.GetDataSetFromExcuteCommand 实现
            SqlCeCommand cmd = GetCommand(SelectCommandString, CommandTextType.Command, Paras);	// 获取命令

            try
            {
                Open();
                trans = conn.BeginTransaction();
                cmd.Transaction = trans;
                SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);									// 创建数据适配器

                da.Fill(ds, startRecord, maxRecord, TableName);				// 数据适配器填充数据记录集

                trans.Commit();
                return 0;
            }
            catch (Exception exp)
            {
                trans.Rollback();
                return -1;
            }
            finally
            {
                Close();					// 关闭连接
            }
        }
        #endregion

        #region 执行存储过程
        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="ProcName">存储过程名</param>
        /// <param name="Paras">存储过程所带参数的数组</param>
        public int ExcuteProc(string ProcName, IDataParameter[] Paras)
        {
            // TODO:  添加 SqlAccess.ExcuteProc 实现
            SqlCeCommand cmd = GetCommand(ProcName, CommandTextType.Procedure, Paras);	// 获取命令

            try
            {
                Open();					// 打开数据库连接                
                trans = conn.BeginTransaction();
                cmd.Transaction = trans;
                cmd.ExecuteNonQuery();	// 执行命令


                trans.Commit();
                return 0;
            }
            catch (Exception exp)
            {
                trans.Rollback();
                return -1;
            }
            finally
            {
                Close();					// 关闭连接
            }
        }
        #endregion

        #region 执行存储过程,返回影响行数
        /// <summary>
        /// 执行存储过程,返回影响行数
        /// </summary>
        /// <param name="ProcName">存储过程名</param>
        /// <param name="Paras">存储过程所带参数的数组</param>
        public int ExcuteProc(string ProcName, IDataParameter[] Paras, ref int a)
        {
            // TODO:  添加 SqlAccess.ExcuteProc 实现
            SqlCeCommand cmd = GetCommand(ProcName, CommandTextType.Procedure, Paras);	// 获取命令

            try
            {
                Open();					// 打开数据库连接
                trans = conn.BeginTransaction();
                cmd.Transaction = trans;
                a = cmd.ExecuteNonQuery();	// 执行命令s
                trans.Commit();
                return 0;
            }
            catch (Exception exp)
            {
                trans.Rollback();
                return -1;
            }
            finally
            {
                Close();					// 关闭连接
            }
        }
        #endregion

        #region 执行查询存储过程获取数据记录集
        /// <summary>
        /// 执行查询存储过程获取数据记录集
        /// </summary>
        /// <param name="SelectProcName">查询存储过程名</param>
        /// <param name="TableName">查询表名</param>
        /// <param name="Paras">查询存储过程所带参数的数组</param>
        /// <returns>执行查询存储过程获取的数据记录集</returns>
        public int GetDataSetFromExcuteProc(string SelectProcName, string TableName, IDataParameter[] Paras, ref DataSet ds)
        {
            // TODO:  添加 SqlAccess.GetDataSetFromExcuteProc 实现
            SqlCeCommand cmd = GetCommand(SelectProcName, CommandTextType.Procedure, Paras);	// 获取命令

            try
            {
                Open();
                trans = conn.BeginTransaction();
                cmd.Transaction = trans;
                SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);			// 创建数据适配器				
                da.Fill(ds, TableName);							// 数据适配器填充数据记录集
                trans.Commit();
                return 0;
            }
            catch (Exception exp)
            {
                trans.Rollback();
                return -1;
            }
            finally
            {
                Close();					// 关闭连接
            }
        }
        #endregion

        #region 执行命令获取第一行第一列的值
        /// <summary>
        /// 执行命令获取第一行第一列的值
        /// </summary>
        /// <param name="CommandString">命令字符串</param>
        /// <param name="Paras">命令所带参数的数组</param>
        /// <returns>第一行第一列的值</returns>
        public object ExecuteCommandScalar(string CommandString, IDataParameter[] Paras)
        {
            // TODO:  添加 SqlAccess.ExecuteCommandScalar 实现
            SqlCeCommand cmd = GetCommand(CommandString, CommandTextType.Command, Paras);	// 获取命令
            object obj = null;

            try
            {
                obj = GetScalar(cmd);		// 获取第一行第一列的值
            }
            catch (Exception exp)
            {
                throw (new Exception("执行命令获取第一行第一列的数据错误:" + exp.Message));
            }

            return obj;
        }
        #endregion

        #region 执行存储过程获取第一行第一列的值
        /// <summary>
        /// 执行存储过程获取第一行第一列的值
        /// </summary>
        /// <param name="ProcName">存储过程名</param>
        /// <param name="Paras">存储过程所带参数的数组</param>
        /// <returns>第一行第一列的值</returns>
        public object ExecuteProcScalar(string ProcName, IDataParameter[] Paras)
        {
            // TODO:  添加 SqlAccess.ExecuteProcScalar 实现
            SqlCeCommand cmd = GetCommand(ProcName, CommandTextType.Procedure, Paras);	// 获取命令
            object obj = null;

            try
            {
                obj = GetScalar(cmd);		// 获取第一行第一列的值
            }
            catch (Exception exp)
            {
                throw (new Exception("执行存储过程获取第一行第一列的数据错误:" + exp.Message));
            }

            return obj;
        }
        #endregion

        #region 执行命令获取数据读取器
        /// <summary>
        /// 执行命令获取数据读取器
        /// </summary>
        /// <param name="SelectCommandString">查询命令字符串</param>
        /// <param name="Paras">查询命令所带参数的数组</param>
        /// <returns>数据读取器</returns>
        public int GetDataReaderFromExcuteCommand(string SelectCommandString, IDataParameter[] Paras, ref IDataReader Reader)
        {
            // TODO:  添加 SqlAccess.GetDataReaderFromExcuteCommand 实现
            SqlCeCommand cmd = GetCommand(SelectCommandString, CommandTextType.Command, Paras);		// 获取命令

            try
            {
                int read = GetDataReader(cmd, ref Reader);		// 获取数据读取器
                if (read == -1)
                {
                    return -1;
                }
                return 0;
            }
            catch (Exception exp)
            {
                return -1;
            }

        }
        #endregion

        #region 执行存储过程获取数据读取器
        /// <summary>
        /// 执行存储过程获取数据读取器
        /// </summary>
        /// <param name="SelectCommandString">查询存储过程名</param>
        /// <param name="Paras">查询存储过程所带参数的数组</param>
        /// <returns>数据读取器</returns>
        public int GetDataReaderFromExcuteProc(string SelectProcName, IDataParameter[] Paras, ref IDataReader Reader)
        {
            // TODO:  添加 SqlAccess.GetDataReaderFromExcuteProc 实现
            SqlCeCommand cmd = GetCommand(SelectProcName, CommandTextType.Procedure, Paras);	// 获取命令

            try
            {
                int read = GetDataReader(cmd, ref (Reader));		// 获取数据读取器
                if (read == -1)
                {
                    return -1;
                }
                return 0;
            }
            catch (Exception exp)
            {
                return -1;
            }

        }
        #endregion

        #endregion
    }
    #endregion

	#region 数据库访问类型
	public enum AccessDBType
	{
		SQL,SqlCe
	}
	#endregion

	#region 数据库访问工厂类
	public class Factory
	{
		#region 获取数据库访问对象
		/// <summary>
		/// 获取数据库访问对象
		/// </summary>
		/// <param name="Type">数据库访问类型</param>
		/// <returns>数据库访问对象</returns>
		public static IDataAccess GetDBAccess(AccessDBType Type)
		{
			IDataAccess DBAccess = null;
			switch (Type)
			{
                case AccessDBType.SqlCe:
                    DBAccess = new SqlCeAccess();
                    break;
			}

			return DBAccess;
		}

		/// <summary>
		/// 获取数据库访问对象
		/// </summary>
		/// <param name="Type">数据库访问类型</param>
		/// <param name="ConnectionString">数据库连接字符串</param>
		/// <returns>数据库访问对象</returns>
		public static IDataAccess GetDBAccess(AccessDBType Type, string ConnectionString)
		{
			IDataAccess DBAccess = null;
			switch (Type)
			{
                case AccessDBType.SqlCe:
                    DBAccess = new SqlCeAccess(ConnectionString);
                    break;
			}

			return DBAccess;
		}
		#endregion
	}
	#endregion
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值