使用db工厂DBHelper类

使用过很多版本的dbhelper无论是自己写还是用被人的但是基本方法都是大同小异,各有千秋一个偶然的机会我发现的使用db工厂来创建操作数据库过程中所需要的各种对象,

这样有一个好处就是,进一步使得数据库与程序的分离,降低他们之间的耦合,当我们由access变更成sqlser或者oracle是仅仅只需要更改配置参数,甚至工厂类微软已经帮我们写好了,不需要明白具体的含义 只需要使用 ,然后更改配置便可以在不同数据库之间进行切换。

<connectionStrings>
    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
    <add name="DataConnection" connectionString="Data Source=.;Initial Catalog=实验4temp;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

以上是config文件中的配置字符串 这里以sqlserver参数为类

线面就是  dbhelper类了  ,此类的产生是由我参考别人的,再经过自己的理解建立起来的功能不是特别完善,但基本常用都有了,可以加入自己的理解自己的想法去进一步完善。

 

在程序中不同层之间以接口进行连接  ,降低耦合也是程序更易于维护,左右闲来无事分享下吧

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data.Common;
using System.Data;
using System.Data.OleDb;
//============================================================
//http://www.cnblogs.com/mxxblog/
//联系Email:446883859@qq.com
//联系qq:446883859
//============================================================

namespace DbHelper
{
    public class SqlHelperFactory
    {
        //db工厂参数
        //Provider=Microsoft.Jet.OLEDB.4.0
        //private static string connectionString = conStr;
        //providerName="System.Data.SqlClient"
        // providerName = "System.Data.OleDb";
        /// <summary>
        /// 链接字符串从Config文件中获取name为 DataConnection
        /// </summary>
        private static string connectionString = ConfigurationManager.ConnectionStrings["DataConnection"].ConnectionString;
        /// <summary>
        /// providerName
        /// </summary>
        private static string providerName = ConfigurationManager.ConnectionStrings["DataConnection"].ProviderName;
        /// <summary>
        /// DbProviderFactory  db工厂
        /// </summary>
        private static DbProviderFactory dbProviderFactory = DbProviderFactories.GetFactory(providerName);
        /// <summary>
        /// 创建数据库链接
        /// </summary>
        /// <returns></returns>
        protected static DbConnection createDbConnection()
        {
            DbConnection dbConnection = dbProviderFactory.CreateConnection();
            dbConnection.ConnectionString = connectionString;
            return dbConnection;
        }
        /// <summary>
        /// 创建参数
        /// </summary>
        /// <param name="parameterName">参数名称</param>
        /// <param name="value">参数值</param>
        /// <param name="dbtype">参数类型</param>
        /// <param name="dataSize">大小</param>
        /// <param name="parameterDirection">输入输出类型</param>
        /// <returns>返回参数DbParameter</returns>
        public static DbParameter createDbParameter(string parameterName, object value, DbType dbtype, int dataSize, ParameterDirection parameterDirection)
        {
            DbParameter dbParameter = dbProviderFactory.CreateParameter();
            dbParameter.ParameterName = parameterName;
            dbParameter.Value = value;
            dbParameter.DbType = dbtype;
            dbParameter.Size = dataSize;
            dbParameter.Direction = parameterDirection;
            return dbParameter;
        }
        /// <summary>
        /// 创建参数
        /// </summary>
        /// <param name="parameterName">参数名称</param>
        /// <param name="value">参数值</param>
        /// <param name="dbtype">参数类型</param>
        /// <param name="parameterDirection">输入输出类型</param>
        /// <returns>返回参数DbParameter</returns>
        public static DbParameter createDbParameter(string parameterName, object value, DbType dbtype, ParameterDirection parameterDirection)
        {
            DbParameter dbParameter = dbProviderFactory.CreateParameter();
            dbParameter.ParameterName = parameterName;
            dbParameter.Value = value;
            dbParameter.DbType = dbtype;

            dbParameter.Direction = parameterDirection;
            return dbParameter;
        }
        /// <summary>
        /// 创建参数
        /// </summary>
        /// <param name="parameterName">名称</param>
        /// <param name="value">值</param>
        /// <returns>返回参数DbParameter</returns>
        public static DbParameter createDbParameter(string parameterName, object value)
        {
            DbParameter dbParameter = dbProviderFactory.CreateParameter();
            dbParameter.ParameterName = parameterName;
            dbParameter.Value = value;
            return dbParameter;
        }
        /// <summary>
        /// createAddDbParameter 添加参数到对应cmd
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="parameterName"></param>
        /// <param name="value"></param>
        /// <param name="dbtype"></param>
        /// <param name="dataSize"></param>
        /// <param name="parameterDirection"></param>
        protected void createAddDbParameter(DbCommand cmd, string parameterName, object value, DbType dbtype, int dataSize, ParameterDirection parameterDirection)
        {
            DbParameter dbParameter = cmd.CreateParameter();
            dbParameter.ParameterName = parameterName;
            dbParameter.Value = value;
            dbParameter.DbType = dbtype;
            dbParameter.Size = dataSize;
            dbParameter.Direction = parameterDirection;
            cmd.Parameters.Add(dbParameter);

        }
        /// <summary>
        /// createAddDbParameter 添加参数到对应cmd
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="parameterName"></param>
        /// <param name="value"></param>
        /// <param name="dbtype"></param>
        /// <param name="parameterDirection"></param>
        protected static void createAddDbParameter(DbCommand cmd, string parameterName, object value, DbType dbtype, ParameterDirection parameterDirection)
        {
            DbParameter dbParameter = cmd.CreateParameter();
            dbParameter.ParameterName = parameterName;
            dbParameter.Value = value;
            dbParameter.DbType = dbtype;
            dbParameter.Direction = parameterDirection;
            cmd.Parameters.Add(dbParameter);

        }
        /// <summary>
        /// createAddDbParameter 添加参数到对应cmd
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="parameterName"></param>
        /// <param name="value"></param>
        /// <param name="parameterDirection"></param>
        protected static void createAddDbParameter(DbCommand cmd, string parameterName, object value, ParameterDirection parameterDirection)
        {
            DbParameter dbParameter = cmd.CreateParameter();
            dbParameter.ParameterName = parameterName;
            dbParameter.Value = value;
            dbParameter.Direction = parameterDirection;
            cmd.Parameters.Add(dbParameter);

        }
        /// <summary>
        /// 向指定cmd添加参数
        /// </summary>
        /// <param name="cmd">cmd</param>
        /// <param name="parameterName">参数名称</param>
        /// <param name="value">参数值</param>
        protected static void createAddDbParameter(DbCommand cmd, string parameterName, object value)
        {
            DbParameter dbParameter = cmd.CreateParameter();
            dbParameter.ParameterName = parameterName;
            dbParameter.Value = value;
            cmd.Parameters.Add(dbParameter);

        }
        /// <summary>
        /// RunExecuteNonQuery
        /// </summary>
        /// <param name="cmdTxt">要执行的sql语句</param>
        /// <param name="paras">值集合</param>
        /// <returns>返回受影响的行数</returns>
        public static int RunExecuteNonQuery(string cmdTxt, params  IDbDataParameter[] paras)
        {
            using (IDbConnection con = createDbConnection())
            {
                con.Open();
                using (IDbCommand cmd = con.CreateCommand())
                {
                    cmd.Connection = con;
                    cmd.CommandText = cmdTxt;
                    foreach (var item in paras)
                    {
                        cmd.Parameters.Add(item);
                    }
                    return cmd.ExecuteNonQuery();
                }
            }
            // return 0;
        }
        /// <summary>
        /// RunExecuteNonQueryByPro 执行对应的存储过程
        /// </summary>
        /// <param name="proName">存储过程名称</param>
        /// <param name="paras">参数集合</param>
        /// <returns>返回受影响的行数</returns>
        public static int RunExecuteNonQueryByPro(string proName, params  IDbDataParameter[] paras)
        {
            using (IDbConnection con = createDbConnection())
            {
                con.Open();
                using (IDbCommand cmd = con.CreateCommand())
                {
                    cmd.Connection = con;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = proName;
                    foreach (var item in paras)
                    {
                        cmd.Parameters.Add(item);
                    }
                    return cmd.ExecuteNonQuery();
                }
            }
            // return 0;
        }
        /// <summary>
        /// RunExecuteScalar
        /// </summary>
        /// <param name="cmdTxt">sql语句</param>
        /// <param name="paras">参数集合</param>
        /// <returns>返回首行首列</returns>
        public static object RunExecuteScalar(string cmdTxt, params IDbDataParameter[] paras)
        {
            using (IDbConnection con = createDbConnection())
            {
                con.Open();
                using (IDbCommand cmd = con.CreateCommand())
                {
                    cmd.Connection = con;
                    cmd.CommandText = cmdTxt;
                    foreach (var item in paras)
                    {
                        cmd.Parameters.Add(item);
                    }
                    return cmd.ExecuteScalar();
                }
            }
            // return 0;
        }
        /// <summary>
        /// RunExecuteScalarByPro
        /// </summary>
        /// <param name="proName">存储过程名称</param>
        /// <param name="paras">参数集合</param>
        /// <returns>返回首行首列</returns>
        public static object RunExecuteScalarByPro(string proName, params IDbDataParameter[] paras)
        {
            using (IDbConnection con = createDbConnection())
            {
                con.Open();
                using (IDbCommand cmd = con.CreateCommand())
                {
                    cmd.Connection = con;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = proName;
                    foreach (var item in paras)
                    {
                        cmd.Parameters.Add(item);
                    }
                    return cmd.ExecuteScalar();
                }
            }
            // return 0;
        }
        /// <summary>
        /// RunExecuteDataReader
        /// </summary>
        /// <param name="cmdTxt">要执行的sql语句</param>
        /// <param name="paras">参数集合</param>
        /// <returns>返回数据读取器</returns>
        public static IDataReader RunExecuteDataReader(string cmdTxt, params IDbDataParameter[] paras)
        {
            IDbConnection con = createDbConnection();
            con.Open();
            using (IDbCommand cmd = con.CreateCommand())
            {
                cmd.Connection = con;
                cmd.CommandText = cmdTxt;
                foreach (var item in paras)
                {
                    cmd.Parameters.Add(item);
                }
                return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }

        }
        /// <summary>
        /// RunExecuteDataTable
        /// </summary>
        /// <param name="cmdTxt">执行的sql语句</param>
        /// <param name="paras">参数集合</param>
        /// <returns>DataSet通过适配器返回DataSet</returns>
        public static DataSet RunExecuteDataTable(string cmdTxt, params IDbDataParameter[] paras)
        {
            DataSet ds = new DataSet();
            using (IDbConnection con = createDbConnection())
            {
                con.Open();
                using (IDbCommand cmd = con.CreateCommand())
                {
                    cmd.Connection = con;
                    cmd.CommandText = cmdTxt;
                    foreach (var item in paras)
                    {
                        cmd.Parameters.Add(item);
                    }
                    IDbDataAdapter sda = dbProviderFactory.CreateDataAdapter();
                    sda.SelectCommand = cmd;
                    sda.Fill(ds);
                    return ds;
                }
            }
        }
    }
}

 

 

posted @ 2012-12-12 18:19  星辰手  阅读(1530)  评论(0编辑  收藏  举报