1. public abstract class DBHelper
  2. {
  3. public static SqlConnection conn = new SqlConnection("server=longdabing;database=test;uid=sa;pwd=sasa");
  4. public DBHelper()
  5. {
  6. conn.Open();
  7. }
  8. /// <summary>
  9. /// insert,update,delete
  10. /// </summary>
  11. /// <returns></returns>
  12. public abstract int ExecuteNonQuery(string sql);
  13. /// <summary>
  14. /// mulinsert
  15. /// </summary>
  16. /// <param name="insertdata"></param>
  17. /// <returns></returns>
  18. public abstract bool MutiInsertData(DataTable insertdata);
  19.  
  20. /// <summary>
  21. /// 查询select
  22. /// </summary>
  23. /// <returns></returns>
  24. public abstract DataTable ExecuteGetData(string sql);
  25.  
  26. //public abstract IQueryable<ldbEFEntities> ExecuteEFQuery();
  27.  
  28. /// <summary>
  29. /// 调用存储过程
  30. /// </summary>
  31. /// <param name="procedurename"></param>
  32. /// <returns>返回数据集</returns>
  33. public abstract DataSet ExeStoredProcedure(string procedurename,SqlParameter[] sqlpara);
  34. /// <summary>
  35. /// 执行存储过程
  36. /// </summary>
  37. /// <param name="procedurename">存储过程名字</param>
  38. /// <param name="sqlpara">参数</param>
  39. /// <returns>返回被影响的行数</returns>
  40. public abstract void ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara,out int rowcount);
  41.  
  42. }
  43.  
  44. /// <summary>
  45. /// sql数据库查询
  46. /// </summary>
  47. public class DBHelperSql : DBHelper
  48. {
  49. public override int ExecuteNonQuery(string sql)
  50. {
  51. int cnt = ;
  52. try
  53. {
  54. SqlCommand cmd = new SqlCommand(sql, conn);
  55. cnt = cmd.ExecuteNonQuery();
  56. cmd.Dispose();
  57.  
  58. return cnt;
  59. }
  60. catch (Exception)
  61. {
  62. return cnt;
  63. }
  64. finally
  65. {
  66. conn.Close();
  67. }
  68. }
  69.  
  70. public override DataTable ExecuteGetData(string sql)
  71. {
  72. DataTable dt = new DataTable();
  73. try
  74. {
  75. SqlDataAdapter sdd = new SqlDataAdapter(sql, conn);
  76. sdd.Fill(dt);
  77. }
  78. catch (Exception)
  79. {
  80. //return dt;
  81. }
  82. finally
  83. {
  84. conn.Close();
  85. }
  86. return dt;
  87. }
  88. /// <summary>
  89. /// 执行存储过程
  90. /// </summary>
  91. /// <param name="procedurename"></param>
  92. /// <param name="sqlpara"></param>
  93. /// <returns>返回数据集</returns>
  94. public override DataSet ExeStoredProcedure(string procedurename,SqlParameter[] sqlpara)
  95. {
  96. DataSet ds = new DataSet();
  97. try
  98. {
  99. SqlCommand cmd = new SqlCommand();
  100. cmd.Connection = conn;
  101. cmd.CommandText = procedurename;
  102. cmd.CommandType = CommandType.StoredProcedure;
  103. if (sqlpara.Length > )
  104. {
  105. cmd.Parameters.AddRange(sqlpara);
  106. }
  107. //cmd.Parameters.Add("@para", SqlDbType.VarChar, 50);
  108. SqlDataAdapter sdd = new SqlDataAdapter(cmd);
  109. sdd.Fill(ds);
  110. }
  111. catch (Exception)
  112. {
  113. //return dt;
  114. }
  115. finally
  116. {
  117. conn.Close();
  118. }
  119. return ds;
  120. }
  121.  
  122. public override void ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara,out int rowcount)
  123. {
  124. rowcount = ;
  125. try
  126. {
  127. SqlCommand cmd = new SqlCommand();
  128. cmd.Connection = conn;
  129. cmd.CommandText = procedurename;
  130. cmd.CommandType = CommandType.StoredProcedure;
  131. //SqlParameter para = new SqlParameter();
  132. //para.TypeName = "";
  133. if (sqlpara.Length > )
  134. {
  135. cmd.Parameters.AddRange(sqlpara);
  136. }
  137. rowcount = cmd.ExecuteNonQuery();
  138. }
  139. catch (Exception)
  140. {
  141. //return dt;
  142. }
  143. finally
  144. {
  145. conn.Close();
  146. }
  147. }
  148.  
  149. public override bool MutiInsertData(DataTable insertdata)
  150. {
  151. SqlBulkCopy bulkCopy = new SqlBulkCopy(conn);
  152. SqlTransaction sqltran = conn.BeginTransaction();//开启事务
  153. bulkCopy.DestinationTableName = "inforsqlbulk";
  154. bulkCopy.BatchSize = insertdata.Rows.Count;
  155.  
  156. if (conn.State == ConnectionState.Closed)
  157. {
  158. conn.Open();
  159. }
  160.  
  161. //for (int i = 0; i < dt.Columns.Count; i++)
  162. //{
  163. // bulkCopy.ColumnMappings.Add(i, i); //映射定义数据源中的列和目标表中的列之间的关系
  164. //}
  165. try
  166. {
  167. if (insertdata != null && insertdata.Rows.Count > )
  168. {
  169. bulkCopy.WriteToServer(insertdata);
  170.  
  171. }
  172. return true;
  173. }
  174. catch
  175. {
  176. sqltran.Rollback();//回滚。
  177. return false;
  178. }
  179. }
  180. }
  181.  
  182. /// <summary>
  183. /// EntityFramework 查询
  184. /// </summary>
  185. public class DBHelperEF : DBHelper
  186. {
  187. public override int ExecuteNonQuery(string sql)
  188. {
  189. throw new NotImplementedException();
  190. }
  191. public override DataTable ExecuteGetData(string sql)
  192. {
  193. throw new NotImplementedException();
  194. }
  195.  
  196. public override DataSet ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara)
  197. {
  198. throw new NotImplementedException();
  199. }
  200.  
  201. public override void ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara, out int rowcount)
  202. {
  203. throw new NotImplementedException();
  204. }
  205.  
  206. public override bool MutiInsertData(DataTable insertdata)
  207. {
  208. throw new NotImplementedException();
  209. }
  210. }
  211. /// <summary>
  212. /// Access数据库
  213. /// </summary>
  214. public class DBHelperAccess : DBHelper
  215. {
  216. public override int ExecuteNonQuery(string sql)
  217. {
  218. throw new NotImplementedException();
  219. }
  220. public override DataTable ExecuteGetData(string sql)
  221. {
  222. throw new NotImplementedException();
  223. }
  224.  
  225. public override DataSet ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara)
  226. {
  227. throw new NotImplementedException();
  228. }
  229.  
  230. public override void ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara, out int rowcount)
  231. {
  232. throw new NotImplementedException();
  233. }
  234.  
  235. public override bool MutiInsertData(DataTable insertdata)
  236. {
  237. throw new NotImplementedException();
  238. }
  239. }
  240.  
  241. /// <summary>
  242. /// Oracle数据库
  243. /// </summary>
  244. public class DBHelperOracle : DBHelper
  245. {
  246. public override int ExecuteNonQuery(string sql)
  247. {
  248. throw new NotImplementedException();
  249. }
  250. public override DataTable ExecuteGetData(string sql)
  251. {
  252. throw new NotImplementedException();
  253. }
  254.  
  255. public override DataSet ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara)
  256. {
  257. throw new NotImplementedException();
  258. }
  259.  
  260. public override void ExeStoredProcedure(string procedurename, SqlParameter[] sqlpara, out int rowcount)
  261. {
  262. throw new NotImplementedException();
  263. }
  264.  
  265. public override bool MutiInsertData(DataTable insertdata)
  266. {
  267. throw new NotImplementedException();
  268. }
  269. }
  270.  
  271. public abstract class DBHelperFactory
  272. {
  273. public abstract DBHelper CreateDBHelper();
  274. }
  275.  
  276. public class DBHelperSQLFactory : DBHelperFactory
  277. {
  278. public override DBHelper CreateDBHelper()
  279. {
  280. return new DBHelperSql();
  281. }
  282. }
  283.  
  284. public class DBHelperAccessFactory : DBHelperFactory
  285. {
  286. public override DBHelper CreateDBHelper()
  287. {
  288. return new DBHelperAccess();
  289. }
  290. }
  291.  
  292. public class DBHelperEFFactory : DBHelperFactory
  293. {
  294. public override DBHelper CreateDBHelper()
  295. {
  296. return new DBHelperEF();
  297. }
  298. }
  299.  
  300. public class DBHelperOracleFactory : DBHelperFactory
  301. {
  302. public override DBHelper CreateDBHelper()
  303. {
  304. return new DBHelperOracle();
  305. }
  306. }

根据抽象工厂实现的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. jxl 导出数据到excel

    优点: Jxl对中文支持非常好,操作简单,方法看名知意. Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写 支持Excel 95-2000 ...

  2. Js表单验证控件(使用方便,无需编码)-01使用说明

    演示地址:http://weishakeji.net/Utility/Verify/Index.htm    开源地址:https://github.com/weishakeji/Verify_Js ...

  3. 使用asyncio实现redis客户端

    redis协议格式请参考,http://doc.redisfans.com/topic/protocol.html 这里简单介绍下: *<参数数量> \r\n $<参数 的字节数量& ...

  4. Django入门-通用视图

    文档:https://docs.djangoproject.com/en/1.11/topics/class-based-views/ from django.shortcuts import get ...

  5. PHP随机函数-集锦

    1 PHP随机函数收藏 function random_string($len = 6) { $chars = array( "a", "b", "c ...

  6. 解决PhpMyadmin1440秒未活动自动退出

    解决方法如下:#vim phpMyAdmin/libraries/config.default.php找到如下位置$cfg['LoginCookieValidity'] = ;    将1440修改成 ...

  7. 夹缝中求生存-在一无所有的php虚拟主机环境下利用smtp发送邮件(二)

    夹缝中求生存 前言:在上一篇随笔中,以163个人邮箱作为发送邮箱地址,当收件邮箱为QQ邮箱时,极有可能会被直接扔进邮件垃圾箱里,为了解决这个问题,申请注册企业邮箱,可以减少发出的邮件被当作垃圾邮件的可 ...

  8. Unity如何管理住Android 6.0 调皮的权限

    前天我们项目有这么个需求,台湾版本由于要上谷歌Play要求安卓系统6.0以上的动态申请权限,对于一个做Unity的来说,是不是有点懵逼,这我该何去何从呢?我想静静,静静的想一想,权限也不就那么点事吗? ...

  9. 使用外置无线网卡来切换mac地址

    mac地址被別人過濾了!小樣,既然內置網卡不能修改mac,那我就用外置usb無線網卡,你以為你很厲害嗎,看我怎麼破解了你.

  10. Selenium学习资源和网站

    用于收集常用的网站和学习资源: 文章: Selenium私房菜系列--总章 WEB 自动化测试工具 Selenium 简介及其应用 Selenium教程 和我一起学 Selenium WebDrive ...