精简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 ...
随机推荐
- 对C语言整数类型的一点理解
作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4321635.html 1.先从一个列子引出问题: //sample_1 unsigned ch ...
- 小白学 Python 数据分析(8):Pandas (七)数据预处理
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 《果壳中的C# C# 5.0 权威指南》 - 学习笔记
<果壳中的C# C# 5.0 权威指南> ========== ========== ==========[作者] (美) Joseph Albahari (美) Ben Albahari ...
- 89组合margin、padding、float、clear问题
有关css外边距margin和内边距padding样式,简而述之,顺时针方向旋转,按照上右下左读取,margin-top:/*距离上边距*/margin-right:/*距离右边距*/margin-b ...
- cesium结合geoserver实现地图空间查询(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- Windows应急响应和系统加固(2)——Windows应急响应的命令使用和安全检查分析
Windows应急响应的命令使用和安全检查分析 1.获取IP地址: ·ipconfig /all,获取Windows主机IP地址信息: ·ipconfig /release,释放网络IP位置: ·ip ...
- Dalvik虚拟机和Art虚拟机
Dalvik虚拟机 DVM是Dalvik Virtual Machine的缩写,是Android4.4及以前使用的虚拟机,所有android程序都运行在android系统进程里,每个进程对应着一个Da ...
- LeetCode 面试题 02.07. 链表相交
题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists-lcci/ 给定两个(单向)链表,判定它们是否相交并返回交 ...
- 汇桔网被曝拖欠12月份工资至今,强制买产品,CEO称去年交易额超400亿
三言财经消息,近日有汇桔网员工爆料,汇桔网拖欠12月工资至今,通知延迟到4月才发放. 此外爆料还指出,"各种手法逼迫大家离开,员工要么继续忍受,要么主动离职,要么停薪留职.都不同意只能仲裁. ...
- 50元求解pyqt加载并显示pdf问题
50块钱求解决pyqt5加载pdf文档并显示,类似briss软件的效果