精简Command版SqlHelper
我在写CSharp程序对数据库进行操作时发现Connection对象起到了连接数据库的做用,实际执行SQL语句使用的是Command对象的方法,所以对SqlHelper进行了重写,具体如下:
一、创建一个ParameterCommand对象,只包含CommandText和Parameters属性,主要用于以事务的方式批量执行SQL语句,我感觉比创建List<string> commandTexts和List<List<DbParameter>> paras两个参数方便,也不容易出错
- public class ParameterCommand
- {
- private List<DbParameter> paras = new List<DbParameter>();
- public string CommandText { get; set; }
- public List<DbParameter> Parameters
- {
- get
- {
- return paras;
- }
- }
- }
二、精简Command版SqlHelper代码如下,传入Command对象做为参数用于执行SQL语句
- public static class SqlHelper
- {
- private static void ResetCommandProperty(DbCommand command, string commandText, params DbParameter[] paras)
- {
- command.Parameters.Clear();
- command.CommandText = commandText;
- command.Parameters.AddRange(paras);
- }
- public static void ExecuteNonQuery(DbCommand command, List<ParameterCommand> paraCommands)
- {
- command.Transaction = command.Connection.BeginTransaction();
- foreach (ParameterCommand paraCommand in paraCommands)
- {
- try
- {
- ResetCommandProperty(command, paraCommand.CommandText,paraCommand.Parameters.ToArray());
- command.ExecuteNonQuery();
- }
- catch (Exception ex)
- {
- command.Transaction.Rollback();
- throw ex;
- }
- }
- command.Transaction.Commit();
- }
- public static void ExecuteNonQuery(DbCommand command, string commandText, params DbParameter[] paras)
- {
- ResetCommandProperty(command, commandText, paras);
- command.ExecuteNonQuery();
- }
- public static DbDataReader ExecuteReader(DbCommand command, ParameterCommand paraCommand)
- {
- ResetCommandProperty(command, paraCommand.CommandText, paraCommand.Parameters.ToArray());
- return command.ExecuteReader();
- }
- public static DbDataReader ExecuteReader(DbCommand command, string commandText, params DbParameter[] paras)
- {
- ResetCommandProperty(command, commandText, paras);
- return command.ExecuteReader();
- }
- public static object ExecuteScalar(DbCommand command, ParameterCommand paraCommand)
- {
- ResetCommandProperty(command, paraCommand.CommandText,paraCommand.Parameters.ToArray());
- return command.ExecuteScalar();
- }
- public static object ExecuteScalar(DbCommand command, string commandText, params DbParameter[] paras)
- {
- ResetCommandProperty(command, commandText, paras);
- return command.ExecuteScalar();
- }
- public static DataTable ExecuteTable(DbCommand command, ParameterCommand paraCommand)
- {
- return ExecuteTable(command, paraCommand.CommandText, paraCommand.Parameters.ToArray());
- }
- public static DataTable ExecuteTable(DbCommand command, string commandText, params DbParameter[] paras)
- {
- DataTable table = new DataTable();
- ResetCommandProperty(command, commandText, paras);
- using (DbDataAdapter adapter = DbProviderFactories.GetFactory(command.Connection).CreateDataAdapter())
- {
- adapter.SelectCommand = command;
- adapter.Fill(table);
- }
- return table;
- }
- }
三、封装的通用DatabaseClient
- public abstract class DatabaseClient
- {
- private DbConnection connection;
- public abstract DbConnection GetConnection();
- private DbCommand GetCommand()
- {
- if (connection == null)
- {
- connection = GetConnection();
- }
- if (connection.State == ConnectionState.Broken)
- {
- connection.Close();
- }
- if (connection.State == ConnectionState.Closed)
- {
- connection.Open();
- }
- return connection.CreateCommand();
- }
- public void ExecuteNonQuery(List<ParameterCommand> paraCommands)
- {
- using (DbCommand command = GetCommand())
- {
- SqlHelper.ExecuteNonQuery(command, paraCommands);
- }
- }
- public void ExecuteNonQuery(string commandText, params DbParameter[] paras)
- {
- using (DbCommand command = GetCommand())
- {
- SqlHelper.ExecuteNonQuery(command, commandText, paras);
- }
- }
- public DbDataReader ExecuteReader(ParameterCommand paraCommand)
- {
- using (DbCommand command = GetCommand())
- {
- return SqlHelper.ExecuteReader(command, paraCommand);
- }
- }
- public DbDataReader ExecuteReader(string commandText, params DbParameter[] paras)
- {
- using (DbCommand command = GetCommand())
- {
- return SqlHelper.ExecuteReader(command, commandText, paras);
- }
- }
- public object ExecuteScalar(ParameterCommand paraCommand)
- {
- using (DbCommand command = GetCommand())
- {
- return SqlHelper.ExecuteScalar(command, paraCommand);
- }
- }
- public object ExecuteScalar(string commandText, params DbParameter[] paras)
- {
- using (DbCommand command = GetCommand())
- {
- return SqlHelper.ExecuteScalar(command, commandText, paras);
- }
- }
- public DataTable ExecuteTable(ParameterCommand paraCommand)
- {
- using (DbCommand command = GetCommand())
- {
- return SqlHelper.ExecuteTable(command, paraCommand);
- }
- }
- public DataTable ExecuteTable(string commandText, params DbParameter[] paras)
- {
- using (DbCommand command = GetCommand())
- {
- return SqlHelper.ExecuteTable(command, commandText, paras);
- }
- }
- }
四、举个栗子:MySQL版客户端
- public class MySqlClient : DatabaseClient
- {
- private string connectionString;
- public MySqlClient(string dataSource, string userName, string password)
- {
- connectionString = "DataSource=" + dataSource + ";UserName=" + userName + ";Password=" + password + ";Charset=utf8";
- }
- public MySqlClient(string dataSource, string userName, string password, string database)
- {
- connectionString = "DataSource=" + dataSource + ";UserName=" + userName + ";Password=" + password + "Database=" + database + ";Charset=utf8";
- }
- public override System.Data.Common.DbConnection GetConnection()
- {
- return new MySqlConnection(connectionString);
- }
- }
精简Command版SqlHelper的更多相关文章
- 通用PE工具箱 4.0精简优化版
通用PE工具箱 4.0精简优化版 经用过不少 WinPE 系统,都不是很满意,普遍存在篡改主页.添加广告链接至收藏夹.未经允许安装推广软件等流氓行为,还集成了诸多不常用的工具,令人头疼不已.那么今天给 ...
- 搜狗拼音输入法 V9.1.0.2589 最新去广告精简优化版
搜狗拼音输入法9.0 正式版例行发布,最新版字母代号b,详细版本号为v9.1.0.2589:搜狗拼音输入法是电脑装机必备软件,版本有传统版和智慧版之分,其打字超准.词库超大.速度飞快.外观漂亮,因此使 ...
- VMware Workstation 14.1.1 精简特别版
VMware Workstation 精简特别版,由卡饭网友のcuiplay精简制作,集成许可证密钥安装即永久激活,该特别版最大特色可安装MAC OS X客户操作系统,此外添加了DELL SLIC 2 ...
- JAVA版SqlHelper
//JAVA版SqlHelper package com.test.Dao; import java.sql.Connection; import java.sql.DriverManager; im ...
- 【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 想找 ...
- Visual C++ 6.0精简绿色版下载及简单使用教程
Visual C++ 6.0精简绿色版下载及简单使用教程 Microsoft Visual C++简介 Visual Studio 是微软公司推出的开发环境,Visual Studio 可以用来创建 ...
- C#版SQLHelper.cs类
using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...
- oracle客户端精简绿色版-环境变量配置
大型项目开发中,常用的数据库,当属Oracle.但Oracle 客户端安装就要一张光盘,体积很大.而且安装后,基本上就用2个功能:TNS配置服务名,SqlPlus.在开发过程中,大量使用Toad和PL ...
- Oracle 精简绿色版客户端的配置
在项目开发中常常用到Oracle.但Oracle 客户端体积很大.安装后,主要用的就1个功能:TNS配置服务名,偶尔用到SqlPlus.在开发过程中,大量使用Navicate和PL/SQL Devel ...
随机推荐
- linux入门系列14--ssh服务及主机远程管理
通过前面十余篇文章的介绍,相信已经初步入门Linux本地管理的基本方法了,后续的文章将介绍Linux中常用的服务部署以及如何为外部提供相应的服务. 系列文章第三篇"linux入门系列3--l ...
- centos7上安装docker社区版
container(容器) docker(集装箱) 容器的优点 1. 启动速度快 2. 节省资源 3. 兼容性高 保证机器正常上网 #ping www.baidu.com CPU需要支持虚拟化 # g ...
- 获取tensorflow中变量的值
names=[i.name for i in tf.all_variables()]for i in names: print i ker=tf.get_default_graph().get_ten ...
- flyway使用简介
官网 https://flywaydb.org/ 背景 Flyway是独立于数据库的应用.管理并跟踪数据库变更的数据库版本管理工具.用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同 ...
- Java日志介绍(4)-Log4j2
Log4j2是Log4j的升级版,相比其前身Log4j 1.x提供了显著的改进,并提供了在Logback中提供的许多改进,同时修复了Logback体系结构中的一些固有问题. Log4j2的内容很多,本 ...
- ArcGIS Server、SDE许可更新
环境:windows server2008,ArcGIS10.1系列. 一.更新arcgis server许可 选择许可文件进行导入即可.注意最好从开始程序中找到并打开软件授权窗口.直接双击运行ecp ...
- Android中TimePicker时间选择器的使用和获取选择的时和分
场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...
- cf1294E
题意简述:给一个矩阵,有两种操作可以进行 操作1:改变矩阵中一个元素的值 操作2:将矩阵中某一列的值循环下移 要求用最少的操作次数使得矩阵变成 题解:对于一列来说,我们肯定是先变化然后再循环下移,所以 ...
- Python 使用OS模块调用 cmd
在os模块中提供了两种调用 cmd 的方法,os.popen() 和 os.system()os.system(cmd) 是在执行command命令时需要打开一个终端,并且无法保存command命令的 ...
- SpringBoot(一) 入门介绍
SpringBoot 简介 springBoot 是 spring 团队伴随着 spring4.0 一同发布的框架,已然成为该团队的一个非常重要的项目.其作用是帮助我们简单迅速地创建一个独立的产品级别 ...