我在写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. Ubuntu14.04安装及配置mysql5.7.19

    通过uname -a或lsb_release -a 查看版本信息 ,确定linux的发行版是debian还是ubuntu.root@suepc:/usr/local# uname -aLinux su ...

  2. Waymo-自动驾驶长尾问题挑战(2019)

    尽管Waymo已经在开放道路上积累超过10 Million Miles,Waymo的工程师们仍然发现有层出不穷的新自动驾驶场景待解决. 1.自动驾驶长尾场景举例 场景一:一个骑自行车的人手中拿着一个S ...

  3. 【转载】Linux设备树(Device Tree)机制

    转:Linux设备树(Device Tree)机制   目录 1. 设备树(Device Tree)基本概念及作用2. 设备树的组成和使用 2.1. DTS和DTSI 2.2. DTC 2.3. DT ...

  4. .net core 部署到IIS 后出现 w3wp.exe 【】发生了未经处理的win32异常……

    抗疫时期,想到弄个微信程序用于社区出入和复工复产人员流动登记,老早就买的盛派的书和视频,一直没时间看,趁这个需求,下载盛派weixinDSK开始学习,先是打开盛派的网站陆续无法打开, 帮助文档也没能抢 ...

  5. [MongoDB] 使用PHP根据_id字段查询数据

    mongo中的_id是一个objectid对象类型,不管是查询时作为条件,还是列表时展示内容,都需要进行一下抓换 查询时要转为objectid对象 列表时要把对象转成字符串覆盖回_id字段 $filt ...

  6. Ubuntu切换为阿里镜像源

    前言 在VM虚拟机搭建Ubuntu系统学习或者测试时,常常要使用apt安装测试,但是由于系统自带的下载源在国外服务器上,下载速度慢的无法忍受.所以我们需要切换为国内镜像源,能显著加快安装包下载速度. ...

  7. Android开发之adt bundle安装

    这个学期开了一门手机游戏开发的课,所以就接触到了adt bundle,Android开发环境有三种方式,分别是JDK+SDK+Eclipse+ADT.JDK+adt-bundle与JDK+Androi ...

  8. Python面向对象设计小结

    转自林海峰老师,学习之余做的笔记. class School: zhuti='学生和老师‘ def __init__(self,name,dic,country): self.mingzi=name ...

  9. Python基础之程序暂停

    当我们执行某些程序时,由于机器速度很快导致肉眼无法直接看到执行结果时程序便停止运行.这时候我们迫切需要在程序中暂停,专业术语叫做阻塞.下面列举几种常用的程序暂停方法: input()用法:直接在欲等待 ...

  10. .net core 3.0+unit of work (一)

    1.先将unit of work源码下载 2.引入自己的项目 3.根据原始项目示意在自己项目的startup里注册仓储 由于我不想对每个实体都注册一遍,我使用了泛型仓储(core 2.0好像不支持) ...