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类的更多相关文章

  1. 设计模式之工厂模式VS抽象工厂

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  2. C#设计模式(3):抽象工厂模式(Abstract Factory)(转载)

    概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来 ...

  3. 设计模式学习之抽象工厂(Abstract Factory,创建型模式)(3)

    假如我们的苹果和香蕉还分为北方的和南方的,那么苹果Apple和香蕉Banana就是抽象类了,所以采集的方法就应该抽象的 第一步: 我们会创建北方的苹果NorthApple类和SourthBanana类 ...

  4. .NET设计模式(3):抽象工厂模式(Abstract Factory)(转)

    概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来 ...

  5. [设计模式]<<设计模式之禅>>抽象工厂模式

    1 女娲的失误 上一篇讲了女娲造人的故事.人是造出来了,世界也热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍 脑袋,忘记给人类定义性别了 ...

  6. .NET设计模式(3):抽象工厂模式(Abstract Factory)

    ):抽象工厂模式(Abstract Factory) 抽象工厂模式(Abstract Factory) --探索设计模式系列之三 Terrylee,2005年12月12日 转载:http://terr ...

  7. C++设计模式——抽象工厂模式

    问题描述 之前讲到了C++设计模式——工厂方法模式,我们可能会想到,后期产品会越来越多了,建立的工厂也会越来越多,工厂进行了增长,工厂变的凌乱而难于管理:由于工厂方法模式创建的对象都是继承于Produ ...

  8. 设计模式(3)抽象工厂模式(Abstract Factory)

    设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 源码地址 0 抽象工厂模式简介 0.0 抽象工厂模式定义 抽象工厂 ...

  9. .NET设计模式 第二部分 创建型模式(2)—抽象工厂模式(Abstract Factory)

    抽象工厂模式(Abstract Factory) ——探索设计模式系列之三 Terrylee,2005年12月12日 概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变 ...

随机推荐

  1. [USACO12JAN]Video Game Combos

    AC自动机建立fail树后树上DP # include <stdio.h> # include <stdlib.h> # include <iostream> # ...

  2. 宿主机无法访问linux虚机中的网站

    问题现象: Nginx服务已启动 80端口被nginx监听 宿主和linux虚机可相互ping通 Linux虚机可用curl访问网站 宿主无法用浏览器访问网站 排查: 1.  查看nginx的acce ...

  3. token的时限多长才合适?

    在使用JWT时,一个让人纠结的问题就是"Token的时限多长才合适?".对此,Stormpath的这篇文章给出了一个可供参考的建议: 面对极度敏感的信息,如钱或银行数据,那就根本不 ...

  4. NancyFX 第十二章 通道截拦

    所有的好的Web框架都有一套好的通道截拦的机制,Nancy在我看来是处理最好的.那什么是请求通道那?下面的图可能说的比较清楚些: 正如名称中描述的,一个典型的Web请求在到达最终响应前会穿过一定数量的 ...

  5. Cracking Wifi Wpa-Wpa2 in 5 second——Dumpper V.80.8 +JumpStart+WinPcap

    标题虽然说是5秒之内破解wpa-wpa2的wifi密码,不过其实这个是针对外国的那种路由器,我们大天朝的路由器越来越强悍了.有的路由器防pin,甚至于一些路由器没有pin,wps之类的.不过还是有一些 ...

  6. 初学Python3 - 写一个登录程序

    本篇主要实现一个简单的登录程序,默认给出一个账号密码,贴出写的代码及过程中遇到的问题. ----------------------------------------要求如下: username p ...

  7. 优化python程序的几点建议

    1.在需要只读序列时,最好使用元组而非列表: 2.使用生成器yield,而不是创建大的元组和列表并在其上进行迭代处理: 3.尽量使用python内置的数据结构,而不实现自己的自定义结构: 4.从小字符 ...

  8. 你学会UI设计了吗?

    你学会UI设计了吗? UI设计师如何前驱? 关于产品 作为一个UI设计师,我们还在干巴巴的等着产品经理甚至交互提供的需求和原型再开始动手吗?这样被动的工作是永远无法提升自己的,当然你也永远只能拿到几千 ...

  9. spring cloud 专题一 (spring cloud 入门搭建 之 Eureka注册中心搭建)

    一.前言 本文为spring cloud 微服务框架专题的第一篇,主要讲解如何快速搭建spring cloud微服务及Eureka 注册中心 以及常用开发方式等. 本文理论不多,主要是傻瓜式的环境搭建 ...

  10. vue实现懒加载的几种方法

    vue实现惰性加载是基于: 1.ES6的异步机制 components: { comp: (resolve, reject) => {} } 2. webpack的代码分割功能 require. ...