• 微软通用类库——DbHelper


      这几天正在做一个小软件,其中Common就是用的微软的DbHelper类,其中的事务用起来比较方便、感觉还算可以,但是总体感觉还是有些欠缺,如果DbCommand对象也能完全封装进去,那就比较理想一些了。    
         各位大侠,请问还有没有更好一些的Common呢? 希望大侠们给予指点。

        using System;

        using System.Data;

        using System.Data.Common;

        using System.Configuration;

        public class DbHelper

        {

            private static string dbProviderName = ConfigurationManager.AppSettings["DbHelperProvider"];

            private static string dbConnectionString = ConfigurationManager.AppSettings["DbHelperConnectionString"];

            private DbConnection connection;

            public DbHelper()

            {

                this.connection = CreateConnection(DbHelper.dbConnectionString);

            }

            public DbHelper(string connectionString)

            {

                this.connection = CreateConnection(connectionString);

            }

            public static DbConnection CreateConnection()

            {

                DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);

                DbConnection dbconn = dbfactory.CreateConnection();

                dbconn.ConnectionString = DbHelper.dbConnectionString;

                return dbconn;

            }

            public static DbConnection CreateConnection(string connectionString)

            {

                DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);

                DbConnection dbconn = dbfactory.CreateConnection();

                dbconn.ConnectionString = connectionString;

                return dbconn;

            }

            public DbCommand GetStoredProcCommond(string storedProcedure)

            {

                DbCommand dbCommand = connection.CreateCommand();

                dbCommand.CommandText = storedProcedure;

                dbCommand.CommandType = CommandType.StoredProcedure;

                return dbCommand;

            }

            public DbCommand GetSqlStringCommond(string sqlQuery)

            {

                DbCommand dbCommand = connection.CreateCommand();

                dbCommand.CommandText = sqlQuery;

                dbCommand.CommandType = CommandType.Text;

                return dbCommand;

            }

            #region 增加参数

            public void AddParameterCollection(DbCommand cmd, DbParameterCollection dbParameterCollection)

            {

                foreach (DbParameter dbParameter in dbParameterCollection)

                {

                    cmd.Parameters.Add(dbParameter);

                }

            }

            public void AddOutParameter(DbCommand cmd, string parameterName, DbType dbType, int size)

            {

                DbParameter dbParameter = cmd.CreateParameter();

                dbParameter.DbType = dbType;

                dbParameter.ParameterName = parameterName;

                dbParameter.Size = size;

                dbParameter.Direction = ParameterDirection.Output;

                cmd.Parameters.Add(dbParameter);

            }

            public void AddInParameter(DbCommand cmd, string parameterName, DbType dbType, object value)

            {

                DbParameter dbParameter = cmd.CreateParameter();

                dbParameter.DbType = dbType;

                dbParameter.ParameterName = parameterName;

                dbParameter.Value = value;

                dbParameter.Direction = ParameterDirection.Input;

                cmd.Parameters.Add(dbParameter);

            }

            public void AddReturnParameter(DbCommand cmd, string parameterName, DbType dbType)

            {

                DbParameter dbParameter = cmd.CreateParameter();

                dbParameter.DbType = dbType;

                dbParameter.ParameterName = parameterName;

                dbParameter.Direction = ParameterDirection.ReturnValue;

                cmd.Parameters.Add(dbParameter);

            }

            public DbParameter GetParameter(DbCommand cmd, string parameterName)

            {

                return cmd.Parameters[parameterName];

            }

            #endregion

            #region 执行

            public DataSet ExecuteDataSet(DbCommand cmd)

            {

                DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);

                DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();

                dbDataAdapter.SelectCommand = cmd;

                DataSet ds = new DataSet();

                dbDataAdapter.Fill(ds);

                return ds;

            }

            public DataTable ExecuteDataTable(DbCommand cmd)

            {

                DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);

                DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();

                dbDataAdapter.SelectCommand = cmd;

                DataTable dataTable = new DataTable();

                dbDataAdapter.Fill(dataTable);

                return dataTable;

            }

            public DbDataReader ExecuteReader(DbCommand cmd)

            {

                cmd.Connection.Open();

                DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);           

                return reader;

            }

            public int ExecuteNonQuery(DbCommand cmd)

            {

                cmd.Connection.Open();

                int ret = cmd.ExecuteNonQuery();

                cmd.Connection.Close();

                return ret;

            }

            public object ExecuteScalar(DbCommand cmd)

            {

                cmd.Connection.Open();

                object ret = cmd.ExecuteScalar();

                cmd.Connection.Close();

                return ret;

            }

            #endregion       

            #region 执行事务

            public DataSet ExecuteDataSet(DbCommand cmd,Trans t)

            {

                cmd.Connection = t.DbConnection;

                cmd.Transaction = t.DbTrans;

                DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);

                DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();

                dbDataAdapter.SelectCommand = cmd;

                DataSet ds = new DataSet();

                dbDataAdapter.Fill(ds);

                return ds;

            }

            public DataTable ExecuteDataTable(DbCommand cmd, Trans t)

            {

                cmd.Connection = t.DbConnection;

                cmd.Transaction = t.DbTrans;

                DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);

                DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();

                dbDataAdapter.SelectCommand = cmd;

                DataTable dataTable = new DataTable();

                dbDataAdapter.Fill(dataTable);

                return dataTable;

            }

            public DbDataReader ExecuteReader(DbCommand cmd, Trans t)

            {

                cmd.Connection.Close();

                cmd.Connection = t.DbConnection;

                cmd.Transaction = t.DbTrans;           

                DbDataReader reader = cmd.ExecuteReader();

                DataTable dt = new DataTable();           

                return reader;

            }

            public int ExecuteNonQuery(DbCommand cmd, Trans t)

            {

                cmd.Connection.Close();

                cmd.Connection = t.DbConnection;

                cmd.Transaction = t.DbTrans; 

                int ret = cmd.ExecuteNonQuery();           

                return ret;

            }

            public object ExecuteScalar(DbCommand cmd, Trans t)

            {

                cmd.Connection.Close();

                cmd.Connection = t.DbConnection;

                cmd.Transaction = t.DbTrans; 

                object ret = cmd.ExecuteScalar();           

                return ret;

            }

            #endregion

        }

        public class Trans : IDisposable

        {

            private DbConnection conn;

            private DbTransaction dbTrans;

            public DbConnection DbConnection

            {

                get { return this.conn; }

            }

            public DbTransaction DbTrans

            {

                get { return this.dbTrans; }

            }

            public Trans()

            {

                conn = DbHelper.CreateConnection();

                conn.Open();

                dbTrans = conn.BeginTransaction();

            }

            public Trans(string connectionString)

            {

                conn = DbHelper.CreateConnection(connectionString);

                conn.Open();

                dbTrans = conn.BeginTransaction();

            }

            public void Commit()

            {

                dbTrans.Commit();

                this.Colse();

            }

            public void RollBack()

            {

                dbTrans.Rollback();

                this.Colse();

            }

            public void Dispose()

            {

                this.Colse();

            }

            public void Colse()

            {

                if (conn.State == System.Data.ConnectionState.Open)

                {

                    conn.Close();

                }

            }

        }

    //那么如何使用它呢?下面我给出一些基本的使用示例,基本能满足你大部分的数据库操作需要了.

    //1)直接执行sql语句

    //        DbHelper db = new DbHelper();

    //        DbCommand cmd = db.GetSqlStringCommond("insert t1 (id)values(‘haha‘)");

    //        db.ExecuteNonQuery(cmd);

    //2)执行存储过程

    //        DbHelper db = new DbHelper();

    //        DbCommand cmd = db.GetStoredProcCommond("t1_insert");

    //        db.AddInParameter(cmd, "@id", DbType.String, "heihei");

    //        db.ExecuteNonQuery(cmd);

    //3)返回DataSet

    //        DbHelper db = new DbHelper();

    //        DbCommand cmd = db.GetSqlStringCommond("select * from t1");

    //        DataSet ds = db.ExecuteDataSet(cmd);

    //4)返回DataTable

    //        DbHelper db = new DbHelper();

    //        DbCommand cmd = db.GetSqlStringCommond("t1_findall");

    //        DataTable dt = db.ExecuteDataTable(cmd);

    //5)输入参数/输出参数/返回值的使用(比较重要哦)

    //        DbHelper db = new DbHelper();

    //        DbCommand cmd = db.GetStoredProcCommond("t2_insert");

    //        db.AddInParameter(cmd, "@timeticks", DbType.Int64, DateTime.Now.Ticks);

    //        db.AddOutParameter(cmd, "@outString", DbType.String, 20);

    //        db.AddReturnParameter(cmd, "@returnValue", DbType.Int32);

    //        db.ExecuteNonQuery(cmd);

    //        string s = db.GetParameter(cmd, "@outString").Value as string;//out parameter

    //        int r = Convert.ToInt32(db.GetParameter(cmd, "@returnValue").Value);//return value

    //6)DataReader使用

    //      DbHelper db = new DbHelper();

    //        DbCommand cmd = db.GetStoredProcCommond("t2_insert");

    //        db.AddInParameter(cmd, "@timeticks", DbType.Int64, DateTime.Now.Ticks);

    //        db.AddOutParameter(cmd, "@outString", DbType.String, 20);

    //        db.AddReturnParameter(cmd, "@returnValue", DbType.Int32);

    //        using (DbDataReader reader = db.ExecuteReader(cmd))

    //        {

    //            dt.Load(reader);

    //        }       

    //        string s = db.GetParameter(cmd, "@outString").Value as string;//out parameter

    //        int r = Convert.ToInt32(db.GetParameter(cmd, "@returnValue").Value);//return value

    //7)事务的使用.(项目中需要将基本的数据库操作组合成一个完整的业务流时,代码级的事务是必不可少的哦)

    //以上我们好像没有指定数据库连接字符串,大家如果看下DbHelper的代码,就知道要使用它必须在config中配置两个参数,如下:

    //    pubic void DoBusiness()

    //    {

    //        using (Trans t = new Trans())

    //        {

    //            try

    //            {

    //                D1(t);

    //                throw new Exception();//如果有异常,会回滚滴

    //                D2(t);

    //                t.Commit();

    //            }

    //            catch

    //            {

    //                t.RollBack();

    //            }

    //        }

    //    }

    //    public void D1(Trans t)

    //    {

    //        DbHelper db = new DbHelper();

    //        DbCommand cmd = db.GetStoredProcCommond("t2_insert");

    //        db.AddInParameter(cmd, "@timeticks", DbType.Int64, DateTime.Now.Ticks);

    //        db.AddOutParameter(cmd, "@outString", DbType.String, 20);

    //        db.AddReturnParameter(cmd, "@returnValue", DbType.Int32);

    //        if (t == null) db.ExecuteNonQuery(cmd);

    //        else db.ExecuteNonQuery(cmd,t);

    //        string s = db.GetParameter(cmd, "@outString").Value as string;//out parameter

    //        int r = Convert.ToInt32(db.GetParameter(cmd, "@returnValue").Value);//return value

    //    }

    //    public void D2(Trans t)

    //    {

    //        DbHelper db = new DbHelper();

    //        DbCommand cmd = db.GetSqlStringCommond("insert t1 (id)values(‘..‘)");       

    //        if (t == null) db.ExecuteNonQuery(cmd);

    //        else db.ExecuteNonQuery(cmd, t);

    //    }

    //    <appSettings>

    //        <add key="DbHelperProvider" value="System.Data.SqlClient"/>

    //        <add key="DbHelperConnectionString" value="Data Source=(local);Initial Catalog=DbHelperTest;Persist Security Info=True;User;Password=sa"/>

    //    appSettings>



    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    vector族函数
    (2)apply函数及其源码
    Eclipse如何修改默认工作空间路径
    怎么将码云的项目导入到eclipse
    在cmd中使用vim编译器
    win8中让cmd.exe始终以管理员身份运行
    cmd命令配置MySQL
    conda的一些指令
    今天遇到的“OS ERROR, permission denied” 如何解决的
    linux的环境变量
  • 原文地址:https://www.cnblogs.com/08shiyan/p/1779391.html
Copyright © 2020-2023  润新知