根据抽象工厂实现的DBHelpers类

Posted longdb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据抽象工厂实现的DBHelpers类相关的知识,希望对你有一定的参考价值。

public abstract class DBHelper
    {
        public static SqlConnection conn = new SqlConnection("server=longdabing;database=test;uid=sa;pwd=sasa");
        public DBHelper()
        {
            conn.Open();
        }
        /// <summary>
        /// insert,update,delete
        /// </summary>
        /// <returns></returns>
        public abstract int ExecuteNonQuery(string sql);
        /// <summary>
        /// mulinsert
        /// </summary>
        /// <param name="insertdata"></param>
        /// <returns></returns>
        public abstract bool MutiInsertData(DataTable insertdata);

        /// <summary>
        /// 查询select
        /// </summary>
        /// <returns></returns>
        public abstract DataTable ExecuteGetData(string sql);

        //public abstract IQueryable<ldbEFEntities> ExecuteEFQuery();

        /// <summary>
        /// 调用存储过程
        /// </summary>
        /// <param name="procedurename"></param>
        /// <returns>返回数据集</returns>
        public abstract DataSet ExeStoredProcedure(string procedurename,SqlParameter[] sqlpara);
        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="procedurename">存储过程名字</param>
        /// <param name="sqlpara">参数</param>
        /// <returns>返回被影响的行数</returns>
        public abstract void ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara,out int rowcount);
        
        }

    /// <summary>
    /// sql数据库查询
    /// </summary>
    public class DBHelperSql : DBHelper
    {
        public override int ExecuteNonQuery(string sql)
        {
            int cnt = 0;
            try
            {
                SqlCommand cmd = new SqlCommand(sql, conn);
                cnt = cmd.ExecuteNonQuery();
                cmd.Dispose();

                return cnt;
            }
            catch (Exception)
            {
                return cnt;
            }
            finally
            {
                conn.Close();
            }
        }

        public override DataTable ExecuteGetData(string sql)
        {
            DataTable dt = new DataTable();
            try
            {
                SqlDataAdapter sdd = new SqlDataAdapter(sql, conn);
                sdd.Fill(dt);
            }
            catch (Exception)
            {
                //return dt;
            }
            finally
            {
                conn.Close();
            }
            return dt;
        }
        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="procedurename"></param>
        /// <param name="sqlpara"></param>
        /// <returns>返回数据集</returns>
        public override DataSet ExeStoredProcedure(string procedurename,SqlParameter[] sqlpara)
        {
            DataSet ds = new DataSet();
            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = procedurename;
                cmd.CommandType = CommandType.StoredProcedure;
                if (sqlpara.Length > 0)
                {
                    cmd.Parameters.AddRange(sqlpara);
                }
                //cmd.Parameters.Add("@para", SqlDbType.VarChar, 50);
                SqlDataAdapter sdd = new SqlDataAdapter(cmd);
                sdd.Fill(ds);
            }
            catch (Exception)
            {
                //return dt;
            }
            finally
            {
                conn.Close();
            }
            return ds;
        }

        public override void ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara,out int rowcount)
        {
            rowcount = 0;
            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = procedurename;
                cmd.CommandType = CommandType.StoredProcedure;
                //SqlParameter para = new SqlParameter();
                //para.TypeName = "";
                if (sqlpara.Length > 0)
                {
                    cmd.Parameters.AddRange(sqlpara);
                }
               rowcount = cmd.ExecuteNonQuery();
            }
            catch (Exception)
            {
                //return dt;
            }
            finally
            {
                conn.Close();
            }
        }

        public override bool MutiInsertData(DataTable insertdata)
        {
            SqlBulkCopy bulkCopy = new SqlBulkCopy(conn);
            SqlTransaction sqltran = conn.BeginTransaction();//开启事务
            bulkCopy.DestinationTableName = "inforsqlbulk";
            bulkCopy.BatchSize = insertdata.Rows.Count;

            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }

            //for (int i = 0; i < dt.Columns.Count; i++)
            //{
            //    bulkCopy.ColumnMappings.Add(i, i);  //映射定义数据源中的列和目标表中的列之间的关系
            //}
            try
            {
                if (insertdata != null && insertdata.Rows.Count > 0)
                {
                    bulkCopy.WriteToServer(insertdata);
                   
                }
                return true;
            }
            catch
            {
                sqltran.Rollback();//回滚。
                return false;
            }
        }
    }

    /// <summary>
    /// EntityFramework 查询
    /// </summary>
    public class DBHelperEF : DBHelper
    {
        public override int ExecuteNonQuery(string sql)
        {
            throw new NotImplementedException();
        }
        public override DataTable ExecuteGetData(string sql)
        {
            throw new NotImplementedException();
        }

        public override DataSet ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara)
        {
            throw new NotImplementedException();
        }

        public override void ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara, out int rowcount)
        {
            throw new NotImplementedException();
        }

        public override bool MutiInsertData(DataTable insertdata)
        {
            throw new NotImplementedException();
        }
    }
    /// <summary>
    /// Access数据库
    /// </summary>
    public class DBHelperAccess : DBHelper
    {
        public override int ExecuteNonQuery(string sql)
        {
            throw new NotImplementedException();
        }
        public override DataTable ExecuteGetData(string sql)
        {
            throw new NotImplementedException();
        }

        public override DataSet ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara)
        {
            throw new NotImplementedException();
        }

        public override void ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara, out int rowcount)
        {
            throw new NotImplementedException();
        }

        public override bool MutiInsertData(DataTable insertdata)
        {
            throw new NotImplementedException();
        }
    }

    /// <summary>
    /// Oracle数据库
    /// </summary>
    public class DBHelperOracle : DBHelper
    {
        public override int ExecuteNonQuery(string sql)
        {
            throw new NotImplementedException();
        }
        public override DataTable ExecuteGetData(string sql)
        {
            throw new NotImplementedException();
        }

        public override DataSet ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara)
        {
            throw new NotImplementedException();
        }

        public override void ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara, out int rowcount)
        {
            throw new NotImplementedException();
        }

        public override bool MutiInsertData(DataTable insertdata)
        {
            throw new NotImplementedException();
        }
    }

    public abstract class DBHelperFactory
    {
       public abstract DBHelper CreateDBHelper();
    }

    public  class DBHelperSQLFactory : DBHelperFactory
    {
        public override DBHelper CreateDBHelper()
        {
            return new DBHelperSql();
        }
    }

    public class DBHelperAccessFactory : DBHelperFactory
    {
        public override DBHelper CreateDBHelper()
        {
            return new DBHelperAccess();
        }
    }

    public class DBHelperEFFactory : DBHelperFactory
    {
        public override DBHelper CreateDBHelper()
        {
            return new DBHelperEF();
        }
    }

    public class DBHelperOracleFactory : DBHelperFactory
    {
        public override DBHelper CreateDBHelper()
        {
            return new DBHelperOracle();
        }
    }

 

以上是关于根据抽象工厂实现的DBHelpers类的主要内容,如果未能解决你的问题,请参考以下文章

设计模式抽象工厂模式 ( 简介 | 适用场景 | 优缺点 | 产品等级结构和产品族 | 代码示例 )

案例分析:设计模式与代码的结构特性

java简单工厂模式

num08---工厂方法模式

工厂模式

23中设计模式之抽象工厂模式