zoukankan      html  css  js  c++  java
  • C# 操作数据库就的那点代码

    操作数据库的那点代码,别在费劲每个数据库都写一遍SQLHelper,SQLiteHelper,OleDbHelper,了,这里都有了.

    接口不发了,自己抽取定义就行了.

    public abstract class DbHelperBase : IDbHelper
        {
            /// <summary>
            /// 直接获得连接字符串
            /// </summary>
            /// <param name="connStr"></param>
            public DbHelperBase(string connStr)
            {
                _ConnStr = connStr;
                _LockExecNonQuery = new object();
                _LockGetDataReader = new object();
                _LockGetScalar = new object();
                _LockGetDataSet = new object();
            }
            /// <summary>
            /// 连接字符串
            /// </summary>
            protected string _ConnStr;
            /// <summary>
            /// 是否事务
            /// </summary>
            bool _IsTrans = false;
    
            object _LockExecNonQuery;
            object _LockGetDataReader;
            object _LockGetScalar;
            object _LockGetDataSet;
    
            protected abstract DbConnection DBConnectionObj { get; }
            protected abstract DbCommand DbCommandObj { get; }
            protected abstract DbDataAdapter DbDataAdapterObj { get; }
            protected DbTransaction DbTransObj;
            /// <summary>
            /// 当前连接
            /// </summary>
            public DbConnection CurrentConnection
            {
                get
                {
                    return DBConnectionObj;
                }
            }
            /// <summary>
            /// 执行sql问错误写日志方法
            /// </summary>
            protected virtual void WriteErrLog(Exception ex, string sqlText, params DbParameter[] param)
            {
                StringPlus logs = new StringPlus();
                logs.AppendLine("SQL文本:");
                logs.AppendLine(sqlText);
                logs.AppendLine("Sql文参数:");
                if (param != null)
                {
                    foreach (DbParameter item in param)
                    {
                        logs.AppendSpaceLine(1, "参数名:{0},参数值:{1}", item.ParameterName, item.Value);
                    }
                }
                logs.AppendLine("原始错误:");
                logs.AppendLine(ex.Message);
                LogHelper.WriteLog("DbErrorLog", logs.ToString());
            }
            /// <summary>
            /// 打开连接,如果已经打开则什么都不执行了
            /// </summary>
            protected virtual void OpenConnection()
            {
                if (DBConnectionObj.State != ConnectionState.Open)
                {
                    DBConnectionObj.ConnectionString = _ConnStr;
                    DBConnectionObj.Open();
                }
            }
            /// <summary>
            /// 关闭连接,如果没有开始事务或连接打开时才关闭
            /// </summary>
            void CloseConnect()
            {
                if (!_IsTrans)
                {
                    if (DBConnectionObj.State == ConnectionState.Open)
                    {
                        DBConnectionObj.Close();
                        DBConnectionObj.Dispose();
                    }
                }
            }
            /// <summary>
            /// 给当前DbCommand对象赋值,并且OpenConnection();
            /// </summary>
            void SetCommandAndOpenConnect(string sqlText, CommandType cmdType, params DbParameter[] param)
            {
                //按说赋值Connection,CommandType,是不用多次赋值的
                DbCommandObj.CommandType = cmdType;
                DbCommandObj.Connection = DBConnectionObj;
                DbCommandObj.Parameters.Clear();
                if (param != null)
                {
                    DbCommandObj.Parameters.AddRange(param);
                }
                DbCommandObj.CommandText = sqlText;
                OpenConnection();
            }
            /// <summary>
            /// 开始执行事务
            /// </summary>
            public virtual void TransStart()
            {
                OpenConnection();
                DbTransObj = DBConnectionObj.BeginTransaction();
                DbCommandObj.Transaction = DbTransObj;
                _IsTrans = true;
            }
            /// <summary>
            /// 事务提交
            /// </summary>
            public virtual void TransCommit()
            {
                _IsTrans = false;
                DbTransObj.Commit();
                CloseConnect();
            }
            /// <summary>
            /// 事务回滚
            /// </summary>
            public virtual void TransRollback()
            {
                _IsTrans = false;
                DbTransObj.Rollback();
                CloseConnect();
            }
            /// <summary>
            /// 执行一条指定命令类型(SQL语句或存储过程等)的SQL语句,返回所影响行数
            /// </summary>
            public virtual int ExecNonQuery(string sqlText, CommandType cmdType, params DbParameter[] param)
            {
                lock (_LockExecNonQuery)
                {
                    try
                    {
                        SetCommandAndOpenConnect(sqlText, cmdType, param);
                        return DbCommandObj.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        WriteErrLog(ex, sqlText, param);
                        throw new DbDataException();
                    }
                    finally
                    {
                        CloseConnect();
                    }
                }
            }
            /// <summary>
            /// 执行一条普通SQL语句的命令,返回所影响行数
            /// </summary>
            public virtual int ExecNonQuery(string sqlText, params DbParameter[] param)
            {
                return ExecNonQuery(sqlText, CommandType.Text, param);
            }
            /// <summary>        
            /// 获得DataReader对象
            /// </summary>
            public virtual DbDataReader GetDataReader(string sqlText, CommandType cmdType, CommandBehavior cmdBehavior, params DbParameter[] param)
            {
                lock (_LockGetDataReader)
                {
                    try
                    {
                        SetCommandAndOpenConnect(sqlText, cmdType, param);
                        DbDataReader dbReader = DbCommandObj.ExecuteReader(cmdBehavior);
                        return dbReader;
                    }
                    catch (Exception ex)
                    {
                        WriteErrLog(ex, sqlText, param);
                        throw new DbDataException();
                    }
                    finally
                    {
                        //DataReader用dbReader对象来关闭,即使非事务也是,不要把注释取消
                        //CloseConnect();
                    }
                }
            }
            /// <summary>
            /// 获得DataReader对象
            /// </summary>
            public virtual DbDataReader GetDataReader(string sqlText, CommandType cmdType, params DbParameter[] param)
            {
                CommandBehavior cmdBehavior;
                if (_IsTrans)
                {
                    cmdBehavior = CommandBehavior.Default;
                }
                else
                {
                    //非事务时,关闭DataReader则关闭当前连接
                    cmdBehavior = CommandBehavior.CloseConnection;
                }
                return GetDataReader(sqlText, cmdType, cmdBehavior, param);
            }
            /// <summary>
            /// 执行sql语句返回DataReader对象
            /// </summary>
            public virtual DbDataReader GetDataReader(string sqlText, params DbParameter[] param)
            {
                return GetDataReader(sqlText, CommandType.Text, param);
            }
            /// <summary>
            /// 获得首行首列
            /// </summary>
            public virtual object GetScalar(string sqlText, CommandType cmdType, params DbParameter[] param)
            {
                lock (_LockGetScalar)
                {
                    try
                    {
                        SetCommandAndOpenConnect(sqlText, cmdType, param);
                        return DbCommandObj.ExecuteScalar();
    
                    }
                    catch (Exception ex)
                    {
                        WriteErrLog(ex, sqlText, param);
                        throw new DbDataException();
                    }
                    finally
                    {
                        CloseConnect();
                    }
                }
            }
            /// <summary>
            /// 执行SQL语句,返回首行首列
            /// </summary>
            public virtual object GetScalar(string sqlText, params DbParameter[] param)
            {
                return GetScalar(sqlText, CommandType.Text, param);
            }
            /// <summary>
            /// 执行一条SQL语句返回DataSet对象
            /// </summary>
            public virtual DataSet GetDataSet(string sqlText, CommandType cmdType, params DbParameter[] param)
            {
                lock (_LockGetDataSet)
                {
                    try
                    {
                        SetCommandAndOpenConnect(sqlText, cmdType, param);
                        DbDataAdapterObj.SelectCommand = DbCommandObj;
                        DataSet ds = new DataSet();
                        DbDataAdapterObj.Fill(ds);
                        return ds;
                    }
                    catch (Exception ex)
                    {
                        WriteErrLog(ex, sqlText, param);
                        throw new DbDataException();
                    }
                    finally
                    {
                        CloseConnect();
                    }
                }
            }
            /// <summary>
            /// 执行一条SQL语句返回DataSet对象
            /// </summary>        
            public virtual DataSet GetDataSet(string sqlText, params DbParameter[] param)
            {
                return GetDataSet(sqlText, CommandType.Text, param);
            }
            /// <summary>
            /// 执行一条SQL语句返回DataTable对象(调用GetDataSet)
            /// </summary>        
            public virtual DataTable GetDataTable(string sqlText, params DbParameter[] param)
            {
                return GetDataTable(sqlText, CommandType.Text, param);
            }
            /// <summary>
            /// 执行一条SQL语句返回DataTable对象(调用GetDataSet)
            /// </summary>
            public virtual DataTable GetDataTable(string sqlText, CommandType cmdType, params DbParameter[] param)
            {
                return (GetDataSet(sqlText, cmdType, param)).Tables[0];
            }
        }
    

      

    下面是一个sqlserver的实现

     public class SQLHelper : DbHelperBase
        {
            public SQLHelper(string connStr)
                : base(connStr)
            { }
    
            SqlConnection _DBConnectionObj;
            SqlCommand _DbCommandObj;
            SqlDataAdapter _DbDataAdapterObj;
    
            protected override DbConnection DBConnectionObj
            {
                get
                {
                    //SqlBulkCopy aa = new SqlBulkCopy(new SqlConnection());
                    if (_DBConnectionObj == null)
                    {
                        _DBConnectionObj = new SqlConnection(_ConnStr);
                    }
                    return _DBConnectionObj;
                }
            }
    
            protected override DbCommand DbCommandObj
            {
                get
                {
                    if (_DbCommandObj == null)
                    {
                        _DbCommandObj = new SqlCommand();
                    }
                    return _DbCommandObj;
                }
            }
    
            protected override DbDataAdapter DbDataAdapterObj
            {
                get
                {
                    if (_DbDataAdapterObj == null)
                    {
                        _DbDataAdapterObj = new SqlDataAdapter();
                    }
                    return _DbDataAdapterObj;
                }
            }
    
        }
    

      

    使用示例:

                IDbHelper sql = new SQLHelper("连接字符串");
                try
                {
                    sql.TransStart(); //事务开始
                    sql.ExecNonQuery("执行sql语句1"); //执行(增删改查)一条sql语句
                    sql.ExecNonQuery("执行sql语句2"); //执行(增删改查)一条sql语句
                    DataTable dt = sql.GetDataTable("查询sql语句1"); //获取一些数据
                    sql.TransCommit(); //提交事务
                }
                catch (Exception ex)
                {
                    sql.TransRollback(); //事务回滚
                    throw;
                }
    

      

  • 相关阅读:
    ppa 安装gnome3
    Ubuntu 升级VisualBox后无法启动 Kernel driver not installed (rc=-1908)
    ubuntu 安装 n卡 驱动
    apt-get 介绍。
    linux流量查看工具 iftop
    Ubuntu防火墙 UFW 设置
    Linux Shell快捷键(基本是通用的)
    gnome3 shell快捷键
    day2 -- 字符串常用方法、列表、字典
    day1 -- Python变量、注释、格式化输出字符串、input、if、while、for
  • 原文地址:https://www.cnblogs.com/xtdhb/p/4267796.html
Copyright © 2011-2022 走看看