DBHelper数据库操作类(一)

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 个人分享地址: 可以参考的:http://www.oschina.net/code/snippet_4946_748                  http://www.oschina.net/code/snippet_172400_8847   using System;using System.

个人分享地址:

可以参考的:http://www.oschina.net/code/snippet_4946_748

                 http://www.oschina.net/code/snippet_172400_8847

 

using System;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Data.OracleClient;
using System.Data.Odbc;
using System.Data.Common;
//using DICOM;
namespace SPD.ERP.DBAccess
{
  /// <summary>
    /// 数据库的类型
    /// </summary>
    public enum DatabaseType
    {
        None,
        SQLServer,
        Oracle,
        ODBC,
    }
   
    public sealed class DbFactory
    {
        private static string connectionString;
        private static DatabaseType dbType = DatabaseType.SQLServer;
        public static string GetConnectString
        {
            get
            {
                if (string.IsNullOrEmpty(connectionString))
                {
                    connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["db1"].ConnectionString;
                   
                }
                return connectionString;
            }
        }

        /// <summary>
        /// 执行查询语句
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static DataSet DoQuery(DbConnection conn, DbTransaction trans, string strSql)
        {
            DbDataAdapter dAdapter = DbFactory.CreateAdapter(strSql, conn);
            try
            {
                dAdapter.SelectCommand.Transaction = trans;
                DataSet ds = new DataSet();
                dAdapter.Fill(ds);
                return ds;
            }
            catch (Exception e)
            {
               throw e;
            }
            finally
            {
                dAdapter.Dispose();
            }


        }
        /// <summary>
        /// 关闭连接
        /// </summary>
        /// <param name="conn"></param>
        public static void CloseConnection(DbConnection conn)
        {
            if (conn.State == ConnectionState.Open)
                conn.Close();
            conn.Dispose();
        }

        /// <summary>
        /// 创建连接
        /// </summary>
        public static DbConnection CreateConnection
        {
            get
            {
                DbConnection conn = null;
                try
                {
                    switch (dbType)
                    {
                        case DatabaseType.SQLServer:
                            conn = new SqlConnection(GetConnectString);
                            break;
                        case DatabaseType.Oracle:
                            conn = new OracleConnection(GetConnectString);
                            break;
                        case DatabaseType.ODBC:
                            conn = new OdbcConnection(GetConnectString);
                            break;
                        default:  //
                            conn = new OleDbConnection(GetConnectString);
                            break;
                    }
                    if (conn != null)
                    {
                        try
                        {
                            conn.Open();
                        }
                        catch (Exception e)
                        {
                            throw e;
                        }
                        return conn;
                    }
                    else
                        throw new Exception("创建连接失败!");
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="dbtype"></param>
        /// <returns></returns>
        public static DbDataAdapter CreateAdapter(DbCommand cmd, DatabaseType dbtype)
        {
            DbDataAdapter da = null;
            switch (dbtype)
            {
                case DatabaseType.SQLServer:
                    da = new SqlDataAdapter((SqlCommand)cmd);
                    break;
                case DatabaseType.Oracle:
                    da = new OracleDataAdapter((OracleCommand)cmd);
                    break;
                case DatabaseType.ODBC:
                    da = new OdbcDataAdapter((OdbcCommand)cmd);
                    break;
                default:    //其它的用OLEDB
                    da = new OleDbDataAdapter((OleDbCommand)cmd);
                    break;
            }

            return da;
        }


        /// <summary>
        ///
        /// </summary>
        /// <param name="cmd"></param>
        /// <returns></returns>
        public static DbDataAdapter CreateAdapter(DbCommand cmd)
        {
            DbDataAdapter da = null;
            switch (dbType)
            {
                case DatabaseType.SQLServer:
                    da = new SqlDataAdapter((SqlCommand)cmd);
                    break;
                case DatabaseType.Oracle:
                    da = new OracleDataAdapter((OracleCommand)cmd);
                    break;
                case DatabaseType.ODBC:
                    da = new OdbcDataAdapter((OdbcCommand)cmd);
                    break;
                default:    //
                    da = new OleDbDataAdapter((OleDbCommand)cmd);
                    break;
            }
            return da;
        }

 

        /// <summary>
        /// 数据适配器
        /// </summary>
        /// <param name="selectComandText"></param>
        /// <param name="cnn"></param>
        /// <returns></returns>
        public static DbDataAdapter CreateAdapter(string selectComandText, DbConnection cnn)
        {
            DbDataAdapter da = null;
            switch (dbType)
            {
                case DatabaseType.SQLServer:
                    da = new SqlDataAdapter(selectComandText, (SqlConnection)cnn);
                    break;

                case DatabaseType.Oracle:
                    da = new OracleDataAdapter(selectComandText, (OracleConnection)cnn);
                    break;
                case DatabaseType.ODBC:
                    da = new OdbcDataAdapter(selectComandText, (OdbcConnection)cnn);
                    break;
                default:    //
                    da = new OleDbDataAdapter(selectComandText, (OleDbConnection)cnn);
                    break;
            }

            return da;

        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="CommandText"></param>
        /// <param name="dbtype"></param>
        /// <param name="cnn"></param>
        /// <returns></returns>

        public static DbCommand CreateCommand(string commandText, DatabaseType dbtype, DbConnection cnn)
        {
            DbCommand cmd = null;
            switch (dbtype)
            {
                case DatabaseType.SQLServer:
                    cmd = new SqlCommand(commandText, (SqlConnection)cnn);
                    break;

                case DatabaseType.Oracle:
                    cmd = new OracleCommand(commandText, (OracleConnection)cnn);
                    break;
                case DatabaseType.ODBC:
                    cmd = new OdbcCommand(commandText, (OdbcConnection)cnn);
                    break;
                default:   //
                    cmd = new OleDbCommand(commandText, (OleDbConnection)cnn);
                    break;
            }

            return cmd;
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="CommandText"></param>
        /// <param name="cnn"></param>
        /// <returns></returns>
        public static DbCommand CreateCommand(string commandText, DbConnection cnn)
        {
            DbCommand cmd = null;
            switch (dbType)
            {
                case DatabaseType.SQLServer:
                    cmd = new SqlCommand(commandText, (SqlConnection)cnn);
                    break;

                case DatabaseType.Oracle:
                    cmd = new OracleCommand(commandText, (OracleConnection)cnn);
                    break;
                case DatabaseType.ODBC:
                    cmd = new OdbcCommand(commandText, (OdbcConnection)cnn);
                    break;
                default:   //
                    cmd = new OleDbCommand(commandText, (OleDbConnection)cnn);
                    break;
            }

            return cmd;
        }

        public static DbCommand CreateCommand(string commandText, DbConnection cnn, DbTransaction trans)
        {
            DbCommand cmd = null;
            switch (dbType)
            {
                case DatabaseType.SQLServer:
                    cmd = new SqlCommand(commandText, (SqlConnection)cnn, (SqlTransaction)trans);
                    break;

                case DatabaseType.Oracle:
                    cmd = new OracleCommand(commandText, (OracleConnection)cnn, (OracleTransaction)trans);
                    break;
                case DatabaseType.ODBC:
                    cmd = new OdbcCommand(commandText, (OdbcConnection)cnn, (OdbcTransaction)trans);
                    break;
                default:   //
                    cmd = new OleDbCommand(commandText, (OleDbConnection)cnn, (OleDbTransaction)trans);
                    break;
            }

            return cmd;
        }


        public static DbCommandBuilder CreateCommandBuilder()
        {
            DbCommandBuilder cmb = null;
            switch (dbType)
            {
                case DatabaseType.SQLServer:
                    cmb = new SqlCommandBuilder();
                    break;

                case DatabaseType.Oracle:
                    cmb = new OracleCommandBuilder();
                    break;
                case DatabaseType.ODBC:
                    cmb = new OdbcCommandBuilder();
                    break;
                default:   //
                    cmb = new OleDbCommandBuilder();
                    break;
            }

            return cmb;
        }


        public static DbCommandBuilder CreateCommandBuilder(DbDataAdapter dat)
        {
            DbCommandBuilder cmb = null;
            switch (dbType)
            {
                case DatabaseType.SQLServer:
                    cmb = new SqlCommandBuilder((SqlDataAdapter)dat);
                    break;

                case DatabaseType.Oracle:
                    cmb = new OracleCommandBuilder((OracleDataAdapter)dat);
                    break;
                case DatabaseType.ODBC:
                    cmb = new OdbcCommandBuilder((OdbcDataAdapter)dat);
                    break;
                default:   //
                    cmb = new OleDbCommandBuilder((OleDbDataAdapter)dat);
                    break;
            }

            return cmb;
        }

        /// <summary>
        /// 执行查询语句
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static DataSet DoQuery(string strSql)
        {

            DbConnection conn = DbFactory.CreateConnection;
            DbDataAdapter dAdapter = DbFactory.CreateAdapter(strSql, conn);
            try
            {
                DataSet ds = new DataSet();
                dAdapter.SelectCommand.CommandTimeout = 0;
                dAdapter.Fill(ds);
                return ds;
            }
            catch (Exception e)
            {
               throw e;
            }
            finally
            {
                dAdapter.Dispose();
                DbFactory.CloseConnection(conn);
            }

        }

        public static DataSet GetDataSchema(string strSql)
        {
            DbConnection conn = DbFactory.CreateConnection;
            try
            {
                using (DbDataAdapter dAdapter = DbFactory.CreateAdapter(strSql, conn))
                {
                    DataSet ds = new DataSet();
                    dAdapter.FillSchema(ds, SchemaType.Mapped);
                    return ds;
                }
            }
            catch (Exception e)
            {
               throw e;
            }
            finally
            {
                DbFactory.CloseConnection(conn);
            }
        }

        /// <summary>
        /// 执行查询语句
        /// </summary>
        /// <param name="strSql">查询语句</param>
        /// <param name="tableName">表名</param>
        /// <returns></returns>
        public static DataSet DoQuery(string strSql, string tableName)
        {

            DbConnection conn = DbFactory.CreateConnection;
            try
            {
                using (DbDataAdapter dAdapter = DbFactory.CreateAdapter(strSql, conn))
                {
                    DataSet ds = new DataSet();
                    dAdapter.SelectCommand.CommandTimeout = 0;
                    //dAdapter.Fill(ds);
                    dAdapter.FillSchema(ds, SchemaType.Mapped, tableName);
                    dAdapter.Fill(ds, tableName);
                    ds.Tables[0].TableName = tableName;
                    //Utils.Tools.RemoveDataTablePrimaryAndAllowDBNull(ds);
                    return ds;
                }


            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                DbFactory.CloseConnection(conn);
            }

        }

        /// <summary>
        /// 执行查询语句
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static DataSet DoQuery(DbConnection conn, string strSql)
        {
            DbDataAdapter dAdapter = DbFactory.CreateAdapter(strSql, conn);
            try
            {
                dAdapter.SelectCommand.CommandTimeout = 0;
                DataSet ds = new DataSet();
                dAdapter.Fill(ds);
                return ds;
            }
            catch (Exception e)
            {
               throw e;
            }
            finally
            {
                dAdapter.Dispose();
            }


        }


        /// <summary>
        /// 执行返回单一变量的sql
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static object DoQueryResultSingleValue(string strSql)
        {
            DbConnection conn = DbFactory.CreateConnection;
            using (DbCommand dc = DbFactory.CreateCommand(strSql, conn))
            {
                dc.CommandTimeout = 0;
                DbDataReader dr = dc.ExecuteReader();
                object obj = null;
                while (dr.Read())
                {
                    obj = dr.GetValue(0);
                    break;
                }
                dr.Close();
                DbFactory.CloseConnection(conn);
                return obj;
            }
        }

        /// <summary>
        /// 执行返回单一变量的sql
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static object DoQueryResultSingleValue(DbConnection conn, string strSql)
        {
            using (DbCommand dc = DbFactory.CreateCommand(strSql, conn))
            {
                dc.CommandTimeout = 0;
                object obj = null;
                using (DbDataReader dr = dc.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        obj = dr.GetValue(0);
                        break;
                    }

                    dr.Close();
                }
                return obj;
            }
        }

        /// <summary>
        /// 执行返回单一变量的sql
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static object DoQueryResultSingleValue(DbConnection conn, DbTransaction tran, string strSql)
        {
            using (DbCommand dc = DbFactory.CreateCommand(strSql, conn, tran))
            {
                object obj = null;
                dc.CommandTimeout = 0;
                using (DbDataReader dr = dc.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        obj = dr.GetValue(0);
                        break;
                    }

                    dr.Close();
                }
                return obj;
            }
        }


        /// <summary>
        /// 执行没有返回结果集的Sql
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string strSql)
        {
            DbConnection conn = DbFactory.CreateConnection;
            using (DbCommand dc = DbFactory.CreateCommand(strSql, conn))
            {
                dc.CommandTimeout = 0;
                try
                {
                    return dc.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                    throw e;
                }
                finally
                {
                    DbFactory.CloseConnection(conn);
                }
            }
        }

        /// <summary>
        /// 执行返回DbDataReader结果集的sql
        /// </summary>
        /// <param name="conn">数据连接对象</param>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static DbDataReader ExecuteReader(DbConnection conn, string strSql)
        {
            using (DbCommand dc = DbFactory.CreateCommand(strSql, conn))
            {
                dc.CommandTimeout = 0;
                DbDataReader dr = dc.ExecuteReader();
                return dr;
            }
        }

        /// <summary>
        /// 执行返回DbDataReader结果集的sql
        /// </summary>
        /// <param name="conn"></param>
        /// <param name="tran"></param>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static DbDataReader ExecuteReader(DbConnection conn, DbTransaction tran, string strSql)
        {
            using (DbCommand dc = DbFactory.CreateCommand(strSql, conn))
            {
                dc.CommandTimeout = 0;
                dc.Transaction = tran;
                DbDataReader dr = dc.ExecuteReader();
                return dr;
            }
        }

 

        /// <summary>
        /// 执行没有返回结果集的Sql,需要事务支持
        /// </summary>
        /// <param name="conn">连接对象</param>
        /// <param name="tran">事务对象</param>
        /// <param name="strSql">sql语句</param>
        /// <returns></returns>
        public static int ExecuteNonQuery(DbConnection conn, IDbTransaction tran, string strSql)
        {
            using (IDbCommand dc = DbFactory.CreateCommand(strSql, conn))
            {
                dc.CommandTimeout = 0;
                dc.Transaction = tran;
                try
                {
                    return dc.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                   throw e;
                }
            }

        }


        /// <summary>
        /// 设置DBDataAdapter的sql
        /// </summary>
        /// <param name="adapter"></param>
        public static void SetDbDataAdapterCommand(DbDataAdapter adapter)
        {

            DbCommandBuilder cb = CreateCommandBuilder(adapter);
            adapter.UpdateCommand = cb.GetUpdateCommand();
            adapter.InsertCommand = cb.GetInsertCommand();
            adapter.DeleteCommand = cb.GetDeleteCommand();


        }


        /// <summary>
        /// 设置DbDataAdapter的事务
        /// </summary>
        /// <param name="adapter"></param>
        /// <param name="tran"></param>
        public static void SetDbDataAdapterTransaction(DbDataAdapter adapter, DbTransaction tran)
        {
            adapter.DeleteCommand.Transaction = tran;
            adapter.SelectCommand.Transaction = tran;
            adapter.UpdateCommand.Transaction = tran;
            adapter.InsertCommand.Transaction = tran;

        }

        /// <summary>
        /// 保存数据集
        /// </summary>
        /// <param name="dsSource">数据源  (数据源中的表名必须是实际的数据表名)</param>
        /// <param name="conn">数据连接对象</param>
        /// <param name="tran">事物对象</param>
        public static void UpdateDateSet(DataSet dsSource, DbConnection conn, DbTransaction tran)
        {
            if (dsSource == null || conn == null || tran == null) return;
            if (dsSource.Tables.Count == 0) return;
            try
            {
                foreach (DataTable dtSource in dsSource.Tables)
                {
                    UpdateDataTable(dtSource, conn, tran);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        /// <summary>
        /// 保持数据表
        /// </summary>
        /// <param name="dtSource">数据源  (数据源中的表名必须是实际的数据表名)</param>
        /// <param name="conn"></param>
        /// <param name="tran"></param>
        public static void UpdateDataTable(DataTable dtSource, DbConnection conn, DbTransaction tran)
        {
            if (dtSource == null || conn == null || tran == null) return;
            try
            {
                string sqlCmd = string.Format("SELECT * FROM [{0}]", dtSource.TableName);
                DbCommand dbCommand = CreateCommand(sqlCmd, conn, tran);
                DbDataAdapter adapter = CreateAdapter(dbCommand);
                DbCommandBuilder cmdBuilder = CreateCommandBuilder(adapter);
                adapter.DeleteCommand = cmdBuilder.GetDeleteCommand();
                adapter.InsertCommand = cmdBuilder.GetInsertCommand();
                adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
                adapter.Update(dtSource);
            }
            catch (Exception e)
            {
                throw e;
            }


        }
    }


}

 

 

目录
相关文章
|
C++
基于Qt的简易计算器设计与实现
基于Qt的简易计算器设计与实现
711 0
|
4月前
|
存储 安全 Linux
Proxmox Backup Server 4.0 Beta - 开源企业级备份解决方案
Proxmox Backup Server 4.0 Beta - 开源企业级备份解决方案
248 0
Proxmox Backup Server 4.0 Beta - 开源企业级备份解决方案
|
4月前
|
机器学习/深度学习 缓存 文字识别
【繁体图片文字识别】竖排的繁体图片文字识别翻译,竖排的繁体图片文字如何识别,竖排繁体图片识别后转横排,竖排的繁体识别比较友好的方法
竖排繁体文字识别系统适用于古籍数字化、港澳台文档、书法作品、历史档案及学术研究等场景,支持图像预处理、自动旋转、OCR识别、竖转横与繁转简。通过咕嘎OCR与OpenCC技术,实现高效精准的文字转换与编辑。
453 0
|
10月前
html+js+css实现的建筑方块立体数字时钟源码
html+js+css实现的建筑方块立体数字时钟源码
497 33
|
关系型数据库 MySQL 数据处理
实时计算 Flink版产品使用问题之oracle-cdc如何进行动态加表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
175 2
JS算法必备之String常用操作方法
线性代数——(期末突击)行列式(下)-行列式按行展开、范德蒙行列式、克拉默法则
线性代数——(期末突击)行列式(下)-行列式按行展开、范德蒙行列式、克拉默法则
697 7
|
Python
python属性错误(AttributeError)
【5月更文挑战第2天】python属性错误(AttributeError)
1175 1
|
安全 项目管理 数据库
PMP题库(二)
PMP题库(二)
725 1
|
应用服务中间件 nginx
上传文件失败413 Request Entity Too Large,nginx配置文件大小的限制
上传文件失败413 Request Entity Too Large,nginx配置文件大小的限制
431 0