zoukankan      html  css  js  c++  java
  • 我的C#

    其中的部分内容是别人的,我修改过了并加入了详细的注释!!!

    一、这个DBHelper的大致块儿如下图:

    二、下面是具体的源代码:

    //命名空间。。。。。

    using System;
    using System.Data;
    using System.Data.Common;
    using System.Configuration;

    namespace Common
    {
       public class DBHelper
      {

         //属性区。。。。。
         private static string dbProviderName = ConfigurationManager.AppSettings["DbHelperProvider"];
         private static string dbConnectionString = ConfigurationManager.AppSettings["Connstr"];//我的数据库连接字符串,其名称是:Connstr
         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;
    }

    /****************************************************< 获取SQL语句命令 >**************************************/
    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)//foreach(数据类型 标识符 in 表达式)
       {
           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;
    }

    /****************************************************< 执行DataTable >******************************************/
    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;
    }

    /****************************************************< 执行Reader >********************************************/
    public DbDataReader ExecuteReader(DbCommand cmd)
    {
        cmd.Connection.Open();
        DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        return reader;
    }

    /****************************************************< 执行SQL语句,并返回受到这条语句而改变的列 >*******************/
    public int ExecuteNonQuery(DbCommand cmd)
    {
        cmd.Connection.Open();
        int ret = cmd.ExecuteNonQuery();
        cmd.Connection.Close();
        return ret;
    }

    /*******************************< 执行SQL语句,从数据库中检索单个值返回值是object类型 >**************************/
    public object ExecuteScalar(DbCommand cmd)
    {
       cmd.Connection.Open();
       object ret = cmd.ExecuteScalar();
       cmd.Connection.Close();
       return ret;
    }
    #endregion


    #region=====================================《 带事务的执行 》===============================
    /****************************************************< 执行DataSet事务 >******************************************/
    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;
    }

    /****************************************************< 执行DataTable事务 >*****************************************/
    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;
    }

    /****************************************************< 执行Reader事务 >********************************************/
    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;
    }

    /****************************************************< ExecuteNonQuery >******************************************/
    public int ExecuteNonQuery(DbCommand cmd, Trans t)
    {
         cmd.Connection.Close();
         cmd.Connection = t.DbConnection;
         cmd.Transaction = t.DbTrans;
         int ret = cmd.ExecuteNonQuery();
         return ret;
    }

    /****************************************************< ExecuteScalar >*********************************************/
    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
    }

    #region=================================================《 事务 》================================
    public class Trans : IDisposable //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()//commit操作
    {
        dbTrans.Commit();
        this.Colse();
    }

    public void RollBack()//RollBack操作
    {
        dbTrans.Rollback();
        this.Colse();
    }

    public void Dispose()
    {
        this.Colse();
    }

    public void Colse()
    {
        if (conn.State == System.Data.ConnectionState.Open)
    {
        conn.Close();
    }
    }
    }
    #endregion
    }

    三、数据库连接字符串

    四、使用DBHelper的Demo

        

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

        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);
        }

    五、我不造程序,我只是程序搬运工!!!

  • 相关阅读:
    redis数据持久化
    redis安全:给redis设置密码
    redis命令总结
    redis事务
    redis发布订阅
    Java中的日期
    链式队列
    删除链表中的结点(链表)、比较含退格的字符串(栈)、棒球比赛(栈)
    物理层
    链式栈
  • 原文地址:https://www.cnblogs.com/xiaobaicai12138/p/5415806.html
Copyright © 2011-2022 走看看