我在写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的更多相关文章

  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 下用 superpi 测试 CPU 性能

  2. [Python]pip 国内源

    临时使用方法 pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com celery END

  3. 杭电------2048神上帝以及老天爷(C语言写)

    #include<stdio.h> ] = { -,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,- }; ] = { }; long long jiec ...

  4. 9种分布式ID生成之 美团(Leaf)实战

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...

  5. codewars--js--Reverse or rotate?----es6变量,箭头函数,正则取块

    问题描述: 对输入的str按照sz个数进行分块,若一块内所有数字的立方和是偶数,则倒序:否则,向左移动一位.然后将修改过的块整合到一个字符串,作为输出. The input is a string s ...

  6. java开发学生信息管理系统 源码

    开发环境:    Windows操作系统开发工具: Eclipse+Jdk+Tomcat+MYSQL数据库 运行效果图 源码及原文链接:https://javadao.xyz/forum.php?mo ...

  7. 随着页面滚动,数字自动增大的jquery特效

    首先为了截出gif图,我下载了一个小工具 GifCam: https://www.appinn.com/gifcam/ 随着页面滚动,数字自动增大的jquery特效 主要就是依赖这个脚本script. ...

  8. oo第三次作业--jml

    1.首先我们应该了解什么是jml,jml是java modeling language的缩写,是一种为java规格化设计的标识语言,简单来说,就是描述“干什么”的标准语言(跟注释差不多,但是是标准化注 ...

  9. RequestFacade对象获取请求头时忽略大小写

    也许在Controller层 在RequestFacde文件中getHeader函数逻辑实现如下所示: public String getHeader(String name) { if(this.r ...

  10. zerotier的下载、安装、配置与使用(win10、ubuntu)

    一.需求描述 2020年,由于“野味肺炎”的影响,笔者要开始在家办公,需要远程连接公司的电脑和设备. 但是公司的网络和家里的网络不是同个局域网,不能直接用微软的远程桌面连接.想挂上公司的vpn,但是又 ...