根据抽象工厂实现的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 = ;
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 > )
{
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 = ;
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = procedurename;
cmd.CommandType = CommandType.StoredProcedure;
//SqlParameter para = new SqlParameter();
//para.TypeName = "";
if (sqlpara.Length > )
{
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 > )
{
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类的更多相关文章
- 设计模式之工厂模式VS抽象工厂
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- C#设计模式(3):抽象工厂模式(Abstract Factory)(转载)
概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来 ...
- 设计模式学习之抽象工厂(Abstract Factory,创建型模式)(3)
假如我们的苹果和香蕉还分为北方的和南方的,那么苹果Apple和香蕉Banana就是抽象类了,所以采集的方法就应该抽象的 第一步: 我们会创建北方的苹果NorthApple类和SourthBanana类 ...
- .NET设计模式(3):抽象工厂模式(Abstract Factory)(转)
概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来 ...
- [设计模式]<<设计模式之禅>>抽象工厂模式
1 女娲的失误 上一篇讲了女娲造人的故事.人是造出来了,世界也热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍 脑袋,忘记给人类定义性别了 ...
- .NET设计模式(3):抽象工厂模式(Abstract Factory)
):抽象工厂模式(Abstract Factory) 抽象工厂模式(Abstract Factory) --探索设计模式系列之三 Terrylee,2005年12月12日 转载:http://terr ...
- C++设计模式——抽象工厂模式
问题描述 之前讲到了C++设计模式——工厂方法模式,我们可能会想到,后期产品会越来越多了,建立的工厂也会越来越多,工厂进行了增长,工厂变的凌乱而难于管理:由于工厂方法模式创建的对象都是继承于Produ ...
- 设计模式(3)抽象工厂模式(Abstract Factory)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 源码地址 0 抽象工厂模式简介 0.0 抽象工厂模式定义 抽象工厂 ...
- .NET设计模式 第二部分 创建型模式(2)—抽象工厂模式(Abstract Factory)
抽象工厂模式(Abstract Factory) ——探索设计模式系列之三 Terrylee,2005年12月12日 概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变 ...
随机推荐
- [BZOJ3207] 花神的嘲讽计划Ⅰ (主席树)
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天D ...
- tree、find、tail命令重要实战
tree -L 1 -d ln -s ext msn 创建软连接 ls -lF| sed -n‘/^d/p’ ls -lF|awk ‘/^d’ ls -lrt 按时间倒着排 vi /etc/pro ...
- FCN小小实战
先说一下前期准备工作:自己的运行环境是Ubuntu16.04+caffe+CPU(这台电脑没有GPU)+python 关于python的搭建就不说了,网上随便一搜,很多参考资源.说一下我配置好caff ...
- sharepoint 2013实践
之前在一篇文章中说过了SharePoint环境的安装.那么如何使用SharePoint开发一个站点呢?这就是本篇所要阐述的问题. 在如何具体操作之前,我们先来普及下SharePoint基础知识.Far ...
- 依赖反转原则DIP 与 asp.net core 项目结构
DIP 依赖反转原则 Dependency Inversion Principle 的定义如下: 高级别的模块不应该依赖于低级别的模块, 他们都应该依赖于抽象. 假设Controller依赖于Repo ...
- VS快速注释
注释:Ctrl+k + Ctrl+c 去注释:Ctrl+k + Ctrl +u
- vue.js设置、获取、删除cookie
项目需要前端获取后台返回的cookie,并以此作判断.我是在main.js入口文件下使用的 具体代码: new Vue({ el: '#app', router, template: '<App ...
- 【前端】input radio多选事件获取所有选中的id,radio样式优化可修改
$("#all_button").on('click', function() { obj = document.getElementsByClassName("inpu ...
- 智能合约语言 Solidity 教程系列2 - 地址类型介绍
Solidity教程系列第二篇 - Solidity地址类型介绍. 写在前面 Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是 ...
- java 三种工厂模式
一.简单工厂模式 一个栗子: 我喜欢吃面条,抽象一个面条基类,(接口也可以),这是产品的抽象类. public abstract class INoodles { /** * 描述每种面条啥样的 */ ...