DbHelper第三版, 数据库通吃
using System;
using System.Collections;
using System.Data;
using System.Data.Common;
using System.Configuration;
namespace Lee.Data
{
public class DataAccess
{
#region 字段 构造函数
public readonly DbProviderFactory Factory;
public readonly ConnectionStringSettings ConnectionSettings;
public static DataAccess Instance = new DataAccess();
DataAccess() {
this.ConnectionSettings = ConfigurationManager.ConnectionStrings["default"];
this.Factory = DbProviderFactories.GetFactory(this.ConnectionSettings.ProviderName);
}
#endregion
#region 创建 DbConnection, DbCommand对象
/// <summary>
/// 获取一个新的DbConnection对象
/// </summary>
/// <returns>DbConnection</returns>
public DbConnection CreateConnection() {
DbConnection connection = Factory.CreateConnection();
connection.ConnectionString = this.ConnectionSettings.ConnectionString;
return connection;
}
/// <summary>
/// 使用sql语句创建一个DbCommand对象
/// </summary>
/// <param name="sql">sql语句</param>
/// <returns></returns>
public DbCommand CreateCommand(String sql) {
return this.CreateCommand(sql, CommandType.Text, null, this.CreateConnection());
}
/// <summary>
/// 使用sql语句,DbConnection对象创建一个DbCommand对象
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="connection">DbConnection对象</param>
/// <returns></returns>
public DbCommand CreateCommand(String sql, DbConnection connection) {
return this.CreateCommand(sql, CommandType.Text, null, connection);
}
/// <summary>
/// 使用sql语句, CommandType, DbParameter数组 创建一个DbCommand对象
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="type">DbCommand所执行命令的类型</param>
/// <param name="parameters">DbCommand的参数</param>
/// <returns></returns>
public DbCommand CreateCommand(String sql, CommandType type, DbParameter[] parameters) {
DbCommand cmd = Factory.CreateCommand();
cmd.CommandType = type;
cmd.CommandText = sql;
cmd.Connection = this.CreateConnection();
if(parameters != null && parameters.Length > 0)
cmd.Parameters.AddRange(parameters);
return cmd;
}
/// <summary>
/// 使用sql语句, CommandType, DbParameter数组, DbConnection对象 创建一个DbCommand对象
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="type">DbCommand所执行命令的类型</param>
/// <param name="parameters">DbCommand的参数</param>
/// <param name="connection">connection对象</param>
/// <returns></returns>
public DbCommand CreateCommand(String sql, CommandType type, DbParameter[] parameters, DbConnection connection) {
DbCommand cmd = null;
if (connection == null) cmd = this.CreateConnection().CreateCommand();
else cmd = connection.CreateCommand();
cmd.CommandType = type;
cmd.CommandText = sql;
if (parameters != null && parameters.Length > 0)
cmd.Parameters.AddRange(parameters);
return cmd;
}
#endregion
#region 执行sql语句
/// <summary>
/// 执行sql语句返回受影响的行数
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <returns></returns>
public int ExecuteNoneQuery(String sql) {
using (DbConnection connection = this.CreateConnection()) {
using (DbCommand command = connection.CreateCommand()) {
this.Open(connection);
command.CommandText = sql;
return command.ExecuteNonQuery();
}
}
}
/// <summary>
/// 使用指定的DbConnection对象执行sql语句并返回受影响的行数
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <param name="connection">DbConnection对象</param>
/// <returns></returns>
public int ExecuteNoneQuery(String sql, DbConnection connection) {
using (DbCommand command = connection.CreateCommand()) {
command.CommandText = sql;
this.Open(connection);
return command.ExecuteNonQuery();
}
}
/// <summary>
/// 执行sql语句获取第一行第一列的值 (Object类型)
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <returns></returns>
public Object ExecuteScalar(String sql) {
using (DbConnection connection = this.CreateConnection()) {
using (DbCommand command = connection.CreateCommand()) {
command.CommandText = sql;
this.Open(connection);
return command.ExecuteScalar();
}
}
}
/// <summary>
/// 使用指定的DbConnection对象执行sql语句并获取第一行第一列的值 (Object类型)
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <param name="connection">DbConnection对象</param>
/// <returns></returns>
public Object ExecuteScalar(String sql, DbConnection connection) {
using (DbCommand command = connection.CreateCommand()) {
command.CommandText = sql;
command.Connection = connection;
this.Open(connection);
return command.ExecuteScalar();
}
}
/// <summary>
/// 执行sql语句获取第一行第一列的值 (int类型)
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <returns></returns>
public Int32? ExecuteScalarGetInt(String sql) {
Object obj = this.ExecuteScalar(sql);
return obj == null ? null : (Int32?)obj;
}
/// <summary>
/// 使用指定的DbConnection执行sql语句并获取第一行第一列的值 (int类型)
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <param name="connection">DbConnection对象</param>
/// <returns></returns>
public Int32? ExecuteScalarGetInt(String sql, DbConnection connection) {
Object obj = this.ExecuteScalar(sql, connection);
return obj == null ? null : (Int32?)obj;
}
/// <summary>
/// 执行sql语句并获取第一行第一列的值 (String类型)
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <returns></returns>
public String ExcuteScalarGetString(String sql) {
Object obj = this.ExecuteScalar(sql);
return obj == null ? null : obj.ToString();
}
/// <summary>
/// 使用指定的DbConnection执行sql语句并获取第一行第一列的值 (String类型)
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <param name="connection">DbConnection对象</param>
/// <returns></returns>
public String ExcuteScalarGetString(String sql, DbConnection connection) {
Object obj = this.ExecuteScalar(sql, connection);
return obj == null ? null : obj.ToString();
}
/// <summary>
/// 使用指定的sql语句创建一个DbDataReader对象
/// </summary>
/// <param name="sql">sql语句</param>
/// <returns></returns>
public DbDataReader ExecuteReader(String sql) {
DbConnection connection = this.CreateConnection();
DbCommand command = connection.CreateCommand();
command.CommandText = sql;
this.Open(connection);
return command.ExecuteReader(CommandBehavior.CloseConnection);
}
/// <summary>
/// 使用指定的DbConnection对象执行sql语句并获取一个DbDataReader对象
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="connection">DbConnection对象</param>
/// <returns></returns>
public DbDataReader ExecuteReader(String sql, DbConnection connection) {
DbCommand command = connection.CreateCommand();
command.CommandText = sql;
this.Open(connection);
return command.ExecuteReader();
}
/// <summary>
/// 执行sql语句返回DataTable
/// </summary>
/// <param name="sql">sql语句</param>
/// <returns></returns>
public DataTable GetDataTable(String sql) {
using (DbConnection connection = this.CreateConnection()) {
using (DbDataAdapter adapter = Factory.CreateDataAdapter()) {
using (adapter.SelectCommand = connection.CreateCommand()) {
adapter.SelectCommand.CommandText = sql;
DataTable table = new DataTable();
adapter.Fill(table);
return table;
}
}
}
}
/// <summary>
/// 执行sql语句返回DataTable
/// </summary>
/// <param name="sql"></param>
/// <param name="connection"></param>
/// <returns></returns>
public DataTable GetDataTable(String sql, DbConnection connection) {
using (DbDataAdapter adapter = Factory.CreateDataAdapter()) {
using (adapter.SelectCommand = connection.CreateCommand()) {
adapter.SelectCommand.CommandText = sql;
DataTable table = new DataTable();
adapter.Fill(table);
return table;
}
}
}
#endregion
#region 执行存储过程
public ArrayList ExecuteProc(String procName, DbParameter[] parameters) {
DbCommand command = this.CreateCommand(procName, CommandType.StoredProcedure, parameters);
ArrayList values = new ArrayList(parameters.Length / 2);
try {
this.Open(command);
command.ExecuteNonQuery();
foreach (DbParameter item in parameters)
if (item.Direction == ParameterDirection.Output)
values.Add(item.Value);
}
catch { throw; }
finally { command.Connection.Dispose(); command.Dispose(); }
return values;
}
/// <summary>
/// 执行存储过程并将输出参数作为int数组返回
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="parameters">存储过程参数</param>
/// <returns></returns>
public Int32[] ExecuteProcGetInt(String procName, DbParameter[] parameters) {
ArrayList values = this.ExecuteProc(procName, parameters);
Int32[] intValues = new Int32[values.Count];
for (int i = 0; i < values.Count; i++)
intValues[i] = (Int32)values[i];
return intValues;
}
/// <summary>
/// 执行存储过程并将输出参数作为String数组返回
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="parameters">存储过程参数</param>
/// <returns></returns>
public String[] ExecuteProcGetString(String procName, DbParameter[] parameters) {
ArrayList values = this.ExecuteProc(procName, parameters);
String[] stringValues = new String[values.Count];
for (int i = 0; i < values.Count; i++)
stringValues[i] = values[i].ToString();
return stringValues;
}
/// <summary>
/// 执行存储过程并获取一个DbDataReader对象
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="parameters">存储过程参数</param>
/// <returns></returns>
public DbDataReader ExecuteProcGetDataReader(String procName, DbParameter[] parameters) {
DbCommand command = this.CreateCommand(procName, CommandType.StoredProcedure, parameters);
DbDataReader reader = null;
try { this.Open(command); reader = command.ExecuteReader(CommandBehavior.CloseConnection); }
catch { throw; }
//finally { command.Connection.Dispose(); command.Dispose(); }
return reader;
}
/// <summary>
/// 执行存储过程获取DataTable
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="parameters">存储过程参数</param>
/// <returns></returns>
public DataTable ExecuteProcGetDataTable(String procName, DbParameter[] parameters) {
DataTable table = new DataTable();
DbDataAdapter adapter = null;
try {
adapter = Factory.CreateDataAdapter();
adapter.SelectCommand = this.CreateCommand(procName, CommandType.StoredProcedure, parameters);
adapter.Fill(table);
}
catch { throw; }
finally {
adapter.SelectCommand.Connection.Dispose();
adapter.SelectCommand.Dispose();
adapter.Dispose();
}
return table;
}
#endregion
#region 其它
/// <summary>
/// 创建一个输入参数
/// </summary>
/// <param name="name"></param>
/// <param name="value"></param>
/// <returns></returns>
public DbParameter CreateParameter(String name, Object value) {
return this.CreateParameter(name, value, DbType.Object, ParameterDirection.Input);
}
/// <summary>
/// 创建一个输入参数
/// </summary>
/// <param name="name"></param>
/// <param name="value"></param>
/// <param name="type"></param>
/// <returns></returns>
public DbParameter CreateParameter(String name, Object value, DbType type) {
return this.CreateParameter(name, value, type, ParameterDirection.Input);
}
/// <summary>
/// 创建一个输出参数
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public DbParameter CreateParameter(String name, DbType type) {
DbParameter parameter = Factory.CreateParameter();
parameter.ParameterName = name;
parameter.Direction = ParameterDirection.Output;
parameter.DbType = type;
return parameter;
}
public DbParameter CreateParameter(String name, Object value, DbType type, ParameterDirection direct) {
DbParameter parameter = Factory.CreateParameter();
parameter.ParameterName = name;
parameter.Value = value;
parameter.DbType = type;
parameter.Direction = direct;
return parameter;
}
/// <summary>
/// 打开连接
/// </summary>
/// <param name="connection">需要打开的DbConnection对象</param>
public void Open(DbConnection connection) {
if(connection.State != ConnectionState.Open)
try { connection.Open(); }
catch { throw; }
}
/// <summary>
/// 打开连接
/// </summary>
/// <param name="command">需要打开的DbCommand对象</param>
public void Open(DbCommand command) {
if (command.Connection.State == ConnectionState.Open)
return;
try { command.Connection.Open(); }
catch { throw; }
}
#endregion
}
}
DbHelper第三版, 数据库通吃的更多相关文章
- [Android 4.4.3] 泛泰A860 Omni4.4.3 20140610 RC2.0 三版通刷 by syhost
欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo cr ...
- 泛泰A870刷4.4专用英文版非触摸CWM Recovery 6.0.4.8(三版通刷)
首先声明. 发此Recovery的目的是測试能否够三版都能够启动. 而且不会出现像850 860之前出现过的卡第一屏问题! 不希望看到某些人士的过度解读!! 此Recovery能够刷第三方4.4 RO ...
- JavaScript高级程序设计(第三版)学习笔记20、21、23章
第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...
- 泛泰A870L/K/S第三版官方4.4.2原来的系统卡刷机包 (愿自己主动ROOT)
采用suky大神ota具,来自官方的拍摄OTA包裹,未做任何改动, 使用官方recovery,还是我的头发中国TWRP 2.7.1.1 for A870 (己主动ROOT. 自己主动ROOT完后就自己 ...
- [Android 4.4.3] 泛泰A870 Mokee4.4.3 20140610 RC2.0 通过刷第三版 by syhost
欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo cr ...
- 【unix网络编程第三版】阅读笔记(三):基本套接字编程
unp第三章主要介绍了基本套接字编程函数.主要有:socket(),bind(),connect(),accept(),listen()等. 本博文也直接进入正题,对这几个函数进行剖析和讲解. 1. ...
- 重读《学习JavaScript数据结构与算法-第三版》- 第5章 队列
定场诗 马瘦毛长蹄子肥,儿子偷爹不算贼,瞎大爷娶个瞎大奶奶,老两口过了多半辈,谁也没看见谁! 前言 本章为重读<学习JavaScript数据结构与算法-第三版>的系列文章,主要讲述队列数据 ...
- 微软发布 Windows Server 2016 预览版第三版,开发者要重点关注Nano Server
微软已经发布 Windows Server 2016 和 System Center 2016 第三个技术预览版,已经提供下载.Windows Server 2016 技术预览版第三版也是首个包括了容 ...
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题
调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...
随机推荐
- 在对话框上拖动按钮并移动该按钮(改写CXXButton::PreTranslateMessage,然后MoveWindow)
// 派生自CButton类,主要过滤WM_LBUTTONDOWN .WM_LBUTTONUP和WM_MOUSEMOVE消息. BOOL m_bFlag = FALSE; // 成员变量,用来标示鼠标 ...
- Android:简单联网获取网页代码
设置权限,在AndroidManifest.xml加入 <uses-permission android:name="android.permission.INTERNET" ...
- 如何将phantomjs单独部署在服务端
如何将phantomjs单独部署在服务端 文章目录 一. 容我分析(lao dao)几句 二. 服务端 Look here 服务端phantomjs搭建 web端搭建及如何调用phantomjs 三. ...
- 转:在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程
本文是一篇在Myeclipse下构建Java Web项目的初级教程.图文并茂,非常详细.所用的Myeclipse版本是7.5. 第一步:新建Web Project,如下图. 第二步,在弹出的窗口填写下 ...
- 语言基础:C#运算符
运算符 分类 符号 解释 优先级 算术运算符 ++ -- 加加 减减 由高到低,即执行顺序由上到下.(圆括号的优先级最高) * / % 乘 除 取余 + - 加 减 关系运 ...
- php程序员应具有的7种能力
php程序员应具有什么样的能力,才能更好的完成工作,才会有更好的发展方向呢?在中国我想您不会写一辈子代码的,那样不可能,过了黄金期,您又怎么办呢?看了本文后,希望对您有所帮助. 一,php能力 1,了 ...
- 写Java程序要体现面向对象
对于之前写的一篇文章现在想想存在不足之处,之前写的测试ArrayList和LinkedList的各项操作性能比较的程序没有体现面向对象的封装特性,所以,今天把代码重新写了一遍,其实改动的地 ...
- uboot---linux
01uboot是没有虚拟地址的 02内存映射是linux内核的机制,也就是从实地址到虚拟地址是linux完成的! -----
- php整理(三): 面向对象
PHP学习(三)----面向对象 首先,还是建立一个好的理解模型: 1.什么是面向对象? 面向对象分为两个部分,那就是:什么是对象和什么是面向? 什么是对象: 对象的出现就是为了用代码更好的绘制我 ...
- Hibernate与Jpa的关系,终于弄懂
我知道Jpa是一种规范,而Hibernate是它的一种实现.除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实 ...