我在写CSharp程序对数据库进行操作时发现Connection对象起到了连接数据库的做用,实际执行SQL语句使用的是Command对象的方法,所以对SqlHelper进行了重写,具体如下:

一、创建一个ParameterCommand对象,只包含CommandText和Parameters属性,主要用于以事务的方式批量执行SQL语句,我感觉比创建List<string> commandTexts和List<List<DbParameter>> paras两个参数方便,也不容易出错

  1. public class ParameterCommand
  2. {
  3.  
  4. private List<DbParameter> paras = new List<DbParameter>();
  5.  
  6. public string CommandText { get; set; }
  7.  
  8. public List<DbParameter> Parameters
  9. {
  10. get
  11. {
  12. return paras;
  13. }
  14. }
  15.  
  16. }

二、精简Command版SqlHelper代码如下,传入Command对象做为参数用于执行SQL语句

  1. public static class SqlHelper
  2. {
  3.  
  4. private static void ResetCommandProperty(DbCommand command, string commandText, params DbParameter[] paras)
  5. {
  6. command.Parameters.Clear();
  7. command.CommandText = commandText;
  8. command.Parameters.AddRange(paras);
  9. }
  10.  
  11. public static void ExecuteNonQuery(DbCommand command, List<ParameterCommand> paraCommands)
  12. {
  13. command.Transaction = command.Connection.BeginTransaction();
  14. foreach (ParameterCommand paraCommand in paraCommands)
  15. {
  16. try
  17. {
  18. ResetCommandProperty(command, paraCommand.CommandText,paraCommand.Parameters.ToArray());
  19. command.ExecuteNonQuery();
  20. }
  21. catch (Exception ex)
  22. {
  23. command.Transaction.Rollback();
  24. throw ex;
  25. }
  26. }
  27. command.Transaction.Commit();
  28. }
  29.  
  30. public static void ExecuteNonQuery(DbCommand command, string commandText, params DbParameter[] paras)
  31. {
  32. ResetCommandProperty(command, commandText, paras);
  33. command.ExecuteNonQuery();
  34. }
  35.  
  36. public static DbDataReader ExecuteReader(DbCommand command, ParameterCommand paraCommand)
  37. {
  38. ResetCommandProperty(command, paraCommand.CommandText, paraCommand.Parameters.ToArray());
  39. return command.ExecuteReader();
  40. }
  41.  
  42. public static DbDataReader ExecuteReader(DbCommand command, string commandText, params DbParameter[] paras)
  43. {
  44. ResetCommandProperty(command, commandText, paras);
  45. return command.ExecuteReader();
  46. }
  47.  
  48. public static object ExecuteScalar(DbCommand command, ParameterCommand paraCommand)
  49. {
  50. ResetCommandProperty(command, paraCommand.CommandText,paraCommand.Parameters.ToArray());
  51. return command.ExecuteScalar();
  52. }
  53.  
  54. public static object ExecuteScalar(DbCommand command, string commandText, params DbParameter[] paras)
  55. {
  56. ResetCommandProperty(command, commandText, paras);
  57. return command.ExecuteScalar();
  58. }
  59.  
  60. public static DataTable ExecuteTable(DbCommand command, ParameterCommand paraCommand)
  61. {
  62. return ExecuteTable(command, paraCommand.CommandText, paraCommand.Parameters.ToArray());
  63. }
  64.  
  65. public static DataTable ExecuteTable(DbCommand command, string commandText, params DbParameter[] paras)
  66. {
  67. DataTable table = new DataTable();
  68. ResetCommandProperty(command, commandText, paras);
  69. using (DbDataAdapter adapter = DbProviderFactories.GetFactory(command.Connection).CreateDataAdapter())
  70. {
  71. adapter.SelectCommand = command;
  72. adapter.Fill(table);
  73. }
  74. return table;
  75. }
  76.  
  77. }

三、封装的通用DatabaseClient

  1. public abstract class DatabaseClient
  2. {
  3. private DbConnection connection;
  4.  
  5. public abstract DbConnection GetConnection();
  6.  
  7. private DbCommand GetCommand()
  8. {
  9. if (connection == null)
  10. {
  11. connection = GetConnection();
  12. }
  13. if (connection.State == ConnectionState.Broken)
  14. {
  15. connection.Close();
  16. }
  17. if (connection.State == ConnectionState.Closed)
  18. {
  19. connection.Open();
  20. }
  21. return connection.CreateCommand();
  22. }
  23.  
  24. public void ExecuteNonQuery(List<ParameterCommand> paraCommands)
  25. {
  26. using (DbCommand command = GetCommand())
  27. {
  28. SqlHelper.ExecuteNonQuery(command, paraCommands);
  29. }
  30. }
  31.  
  32. public void ExecuteNonQuery(string commandText, params DbParameter[] paras)
  33. {
  34. using (DbCommand command = GetCommand())
  35. {
  36. SqlHelper.ExecuteNonQuery(command, commandText, paras);
  37. }
  38. }
  39.  
  40. public DbDataReader ExecuteReader(ParameterCommand paraCommand)
  41. {
  42. using (DbCommand command = GetCommand())
  43. {
  44. return SqlHelper.ExecuteReader(command, paraCommand);
  45. }
  46. }
  47.  
  48. public DbDataReader ExecuteReader(string commandText, params DbParameter[] paras)
  49. {
  50. using (DbCommand command = GetCommand())
  51. {
  52. return SqlHelper.ExecuteReader(command, commandText, paras);
  53. }
  54. }
  55.  
  56. public object ExecuteScalar(ParameterCommand paraCommand)
  57. {
  58. using (DbCommand command = GetCommand())
  59. {
  60. return SqlHelper.ExecuteScalar(command, paraCommand);
  61. }
  62. }
  63.  
  64. public object ExecuteScalar(string commandText, params DbParameter[] paras)
  65. {
  66. using (DbCommand command = GetCommand())
  67. {
  68. return SqlHelper.ExecuteScalar(command, commandText, paras);
  69. }
  70. }
  71.  
  72. public DataTable ExecuteTable(ParameterCommand paraCommand)
  73. {
  74. using (DbCommand command = GetCommand())
  75. {
  76. return SqlHelper.ExecuteTable(command, paraCommand);
  77. }
  78. }
  79.  
  80. public DataTable ExecuteTable(string commandText, params DbParameter[] paras)
  81. {
  82. using (DbCommand command = GetCommand())
  83. {
  84. return SqlHelper.ExecuteTable(command, commandText, paras);
  85. }
  86. }
  87.  
  88. }

四、举个栗子:MySQL版客户端

  1. public class MySqlClient : DatabaseClient
  2. {
  3. private string connectionString;
  4.  
  5. public MySqlClient(string dataSource, string userName, string password)
  6. {
  7. connectionString = "DataSource=" + dataSource + ";UserName=" + userName + ";Password=" + password + ";Charset=utf8";
  8. }
  9.  
  10. public MySqlClient(string dataSource, string userName, string password, string database)
  11. {
  12. connectionString = "DataSource=" + dataSource + ";UserName=" + userName + ";Password=" + password + "Database=" + database + ";Charset=utf8";
  13. }
  14.  
  15. public override System.Data.Common.DbConnection GetConnection()
  16. {
  17. return new MySqlConnection(connectionString);
  18. }
  19. }

精简Command版SqlHelper的更多相关文章

  1. 通用PE工具箱 4.0精简优化版

    通用PE工具箱 4.0精简优化版 经用过不少 WinPE 系统,都不是很满意,普遍存在篡改主页.添加广告链接至收藏夹.未经允许安装推广软件等流氓行为,还集成了诸多不常用的工具,令人头疼不已.那么今天给 ...

  2. 搜狗拼音输入法 V9.1.0.2589 最新去广告精简优化版

    搜狗拼音输入法9.0 正式版例行发布,最新版字母代号b,详细版本号为v9.1.0.2589:搜狗拼音输入法是电脑装机必备软件,版本有传统版和智慧版之分,其打字超准.词库超大.速度飞快.外观漂亮,因此使 ...

  3. VMware Workstation 14.1.1 精简特别版

    VMware Workstation 精简特别版,由卡饭网友のcuiplay精简制作,集成许可证密钥安装即永久激活,该特别版最大特色可安装MAC OS X客户操作系统,此外添加了DELL SLIC 2 ...

  4. JAVA版SqlHelper

    //JAVA版SqlHelper package com.test.Dao; import java.sql.Connection; import java.sql.DriverManager; im ...

  5. 【ZZ】Visual C++ 6.0 精简安装版(支持VA、ICC 等等安装)

    (2012-04-22 08:10:10) 标签: it 分类: 软件_Software Visual C++ 6.0 精简安装版(支持VA.ICC 等等安装) 2012-04-16 21:07 想找 ...

  6. Visual C++ 6.0精简绿色版下载及简单使用教程

    Visual C++ 6.0精简绿色版下载及简单使用教程 Microsoft Visual C++简介 Visual Studio 是微软公司推出的开发环境,Visual Studio 可以用来创建 ...

  7. C#版SQLHelper.cs类

    using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...

  8. oracle客户端精简绿色版-环境变量配置

    大型项目开发中,常用的数据库,当属Oracle.但Oracle 客户端安装就要一张光盘,体积很大.而且安装后,基本上就用2个功能:TNS配置服务名,SqlPlus.在开发过程中,大量使用Toad和PL ...

  9. Oracle 精简绿色版客户端的配置

    在项目开发中常常用到Oracle.但Oracle 客户端体积很大.安装后,主要用的就1个功能:TNS配置服务名,偶尔用到SqlPlus.在开发过程中,大量使用Navicate和PL/SQL Devel ...

随机推荐

  1. linux入门系列14--ssh服务及主机远程管理

    通过前面十余篇文章的介绍,相信已经初步入门Linux本地管理的基本方法了,后续的文章将介绍Linux中常用的服务部署以及如何为外部提供相应的服务. 系列文章第三篇"linux入门系列3--l ...

  2. centos7上安装docker社区版

    container(容器) docker(集装箱) 容器的优点 1. 启动速度快 2. 节省资源 3. 兼容性高 保证机器正常上网 #ping www.baidu.com CPU需要支持虚拟化 # g ...

  3. 获取tensorflow中变量的值

    names=[i.name for i in tf.all_variables()]for i in names: print i ker=tf.get_default_graph().get_ten ...

  4. flyway使用简介

    官网 https://flywaydb.org/ 背景 Flyway是独立于数据库的应用.管理并跟踪数据库变更的数据库版本管理工具.用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同 ...

  5. Java日志介绍(4)-Log4j2

    Log4j2是Log4j的升级版,相比其前身Log4j 1.x提供了显著的改进,并提供了在Logback中提供的许多改进,同时修复了Logback体系结构中的一些固有问题. Log4j2的内容很多,本 ...

  6. ArcGIS Server、SDE许可更新

    环境:windows server2008,ArcGIS10.1系列. 一.更新arcgis server许可 选择许可文件进行导入即可.注意最好从开始程序中找到并打开软件授权窗口.直接双击运行ecp ...

  7. Android中TimePicker时间选择器的使用和获取选择的时和分

    场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...

  8. cf1294E

    题意简述:给一个矩阵,有两种操作可以进行 操作1:改变矩阵中一个元素的值 操作2:将矩阵中某一列的值循环下移 要求用最少的操作次数使得矩阵变成 题解:对于一列来说,我们肯定是先变化然后再循环下移,所以 ...

  9. Python 使用OS模块调用 cmd

    在os模块中提供了两种调用 cmd 的方法,os.popen() 和 os.system()os.system(cmd) 是在执行command命令时需要打开一个终端,并且无法保存command命令的 ...

  10. SpringBoot(一) 入门介绍

    SpringBoot 简介 springBoot 是 spring 团队伴随着 spring4.0 一同发布的框架,已然成为该团队的一个非常重要的项目.其作用是帮助我们简单迅速地创建一个独立的产品级别 ...