C# 数据库通用类
通用类
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ESRTools
{/// <summary>/// 通用数据库访问类,封装了对数据库的常见操作///</summary>public sealed class DbUtility{public string ConnectionString { get; set; }private DbProviderFactory providerFactory;/// <summary>/// 构造函数/// </summary>/// <param name="connectionString">数据库连接字符串</param>/// <param name="providerType">数据库类型枚举,参见<paramref name="providerType"/></param>public DbUtility(string connectionString, DbProviderType providerType){ConnectionString = connectionString;providerFactory = ProviderFactory.GetDbProviderFactory(providerType);if (providerFactory == null){throw new ArgumentException("Can't load DbProviderFactory for given value of providerType");}}/// <summary> /// 对数据库执行增删改操作,返回受影响的行数。 /// </summary> /// <param name="sql">要执行的增删改的SQL语句</param> /// <param name="parameters">执行增删改语句所需要的参数</param>/// <returns></returns> public int ExecuteNonQuery(string sql, IList<DbParameter> parameters){return ExecuteNonQuery(sql, parameters, CommandType.Text);}/// <summary> /// 对数据库执行增删改操作,返回受影响的行数。 /// </summary> /// <param name="sql">要执行的增删改的SQL语句</param> /// <param name="parameters">执行增删改语句所需要的参数</param>/// <param name="commandType">执行的SQL语句的类型</param>/// <returns></returns>public int ExecuteNonQuery(string sql, IList<DbParameter> parameters, CommandType commandType){using (DbCommand command = CreateDbCommand(sql, parameters, commandType)){command.Connection.Open();int affectedRows = command.ExecuteNonQuery();command.Connection.Close();return affectedRows;}}/// <summary> /// 执行一个查询语句,返回一个关联的DataReader实例 /// </summary> /// <param name="sql">要执行的查询语句</param> /// <param name="parameters">执行SQL查询语句所需要的参数</param>/// <returns></returns> public DbDataReader ExecuteReader(string sql, IList<DbParameter> parameters){return ExecuteReader(sql, parameters, CommandType.Text);}/// <summary> /// 执行一个查询语句,返回一个关联的DataReader实例 /// </summary> /// <param name="sql">要执行的查询语句</param> /// <param name="parameters">执行SQL查询语句所需要的参数</param>/// <param name="commandType">执行的SQL语句的类型</param>/// <returns></returns> public DbDataReader ExecuteReader(string sql, IList<DbParameter> parameters, CommandType commandType){DbCommand command = CreateDbCommand(sql, parameters, commandType);command.Connection.Open();return command.ExecuteReader(CommandBehavior.CloseConnection);}/// <summary> /// 执行一个查询语句,返回一个包含查询结果的DataTable /// </summary> /// <param name="sql">要执行的查询语句</param> /// <param name="parameters">执行SQL查询语句所需要的参数</param>/// <returns></returns>public DataTable ExecuteDataTable(string sql, IList<DbParameter> parameters){return ExecuteDataTable(sql, parameters, CommandType.Text);}/// <summary> /// 执行一个查询语句,返回一个包含查询结果的DataTable /// </summary> /// <param name="sql">要执行的查询语句</param> /// <param name="parameters">执行SQL查询语句所需要的参数</param>/// <param name="commandType">执行的SQL语句的类型</param>/// <returns></returns>public DataTable ExecuteDataTable(string sql, IList<DbParameter> parameters, CommandType commandType){using (DbCommand command = CreateDbCommand(sql, parameters, commandType)){using (DbDataAdapter adapter = providerFactory.CreateDataAdapter()){adapter.SelectCommand = command;DataTable data = new DataTable();adapter.Fill(data);return data;}}}/// <summary> /// 执行一个查询语句,返回查询结果的第一行第一列 /// </summary> /// <param name="sql">要执行的查询语句</param> /// <param name="parameters">执行SQL查询语句所需要的参数</param> /// <returns></returns> public Object ExecuteScalar(string sql, IList<DbParameter> parameters){return ExecuteScalar(sql, parameters, CommandType.Text);}/// <summary> /// 执行一个查询语句,返回查询结果的第一行第一列 /// </summary> /// <param name="sql">要执行的查询语句</param> /// <param name="parameters">执行SQL查询语句所需要的参数</param> /// <param name="commandType">执行的SQL语句的类型</param>/// <returns></returns> public Object ExecuteScalar(string sql, IList<DbParameter> parameters, CommandType commandType){using (DbCommand command = CreateDbCommand(sql, parameters, commandType)){command.Connection.Open();object result = command.ExecuteScalar();command.Connection.Close();return result;}}public DbParameter CreateDbParameter(string name, object value){return CreateDbParameter(name, ParameterDirection.Input, value);}public DbParameter CreateDbParameter(string name, ParameterDirection parameterDirection, object value){DbParameter parameter = providerFactory.CreateParameter();parameter.ParameterName = name;parameter.Value = value;parameter.Direction = parameterDirection;return parameter;}/// <summary>/// 创建一个DbCommand对象/// </summary>/// <param name="sql">要执行的查询语句</param> /// <param name="parameters">执行SQL查询语句所需要的参数</param>/// <param name="commandType">执行的SQL语句的类型</param>/// <returns></returns>private DbCommand CreateDbCommand(string sql, IList<DbParameter> parameters, CommandType commandType){DbConnection connection = providerFactory.CreateConnection();DbCommand command = providerFactory.CreateCommand();connection.ConnectionString = ConnectionString;command.CommandText = sql;command.CommandType = commandType;command.Connection = connection;if (!(parameters == null || parameters.Count == 0)){foreach (DbParameter parameter in parameters){command.Parameters.Add(parameter);}}return command;}}/// <summary>/// 数据库类型枚举/// </summary>public enum DbProviderType : byte{SqlServer,MySql,SQLite,Oracle,ODBC,OleDb,Firebird,PostgreSql,DB2,Informix,SqlServerCe}/// <summary>/// DbProviderFactory工厂类/// </summary>public class ProviderFactory{private static Dictionary<DbProviderType, string> providerInvariantNames = new Dictionary<DbProviderType, string>();private static Dictionary<DbProviderType, DbProviderFactory> providerFactoies = new Dictionary<DbProviderType, DbProviderFactory>(20);static ProviderFactory(){//加载已知的数据库访问类的程序集providerInvariantNames.Add(DbProviderType.SqlServer, "System.Data.SqlClient");providerInvariantNames.Add(DbProviderType.OleDb, "System.Data.OleDb");providerInvariantNames.Add(DbProviderType.ODBC, "System.Data.ODBC");providerInvariantNames.Add(DbProviderType.Oracle, "Oracle.DataAccess.Client");providerInvariantNames.Add(DbProviderType.MySql, "MySql.Data.MySqlClient");providerInvariantNames.Add(DbProviderType.SQLite, "System.Data.SQLite");providerInvariantNames.Add(DbProviderType.Firebird, "FirebirdSql.Data.Firebird");providerInvariantNames.Add(DbProviderType.PostgreSql, "Npgsql");providerInvariantNames.Add(DbProviderType.DB2, "IBM.Data.DB2.iSeries");providerInvariantNames.Add(DbProviderType.Informix, "IBM.Data.Informix");providerInvariantNames.Add(DbProviderType.SqlServerCe, "System.Data.SqlServerCe");}/// <summary>/// 获取指定数据库类型对应的程序集名称/// </summary>/// <param name="providerType">数据库类型枚举</param>/// <returns></returns>public static string GetProviderInvariantName(DbProviderType providerType){return providerInvariantNames[providerType];}/// <summary>/// 获取指定类型的数据库对应的DbProviderFactory/// </summary>/// <param name="providerType">数据库类型枚举</param>/// <returns></returns>public static DbProviderFactory GetDbProviderFactory(DbProviderType providerType){//如果还没有加载,则加载该DbProviderFactoryif (!providerFactoies.ContainsKey(providerType)){providerFactoies.Add(providerType, ImportDbProviderFactory(providerType));}return providerFactoies[providerType];}/// <summary>/// 加载指定数据库类型的DbProviderFactory/// </summary>/// <param name="providerType">数据库类型枚举</param>/// <returns></returns>private static DbProviderFactory ImportDbProviderFactory(DbProviderType providerType){string providerName = providerInvariantNames[providerType];DbProviderFactory factory = null;try{//从全局程序集中查找factory = DbProviderFactories.GetFactory(providerName);}catch (ArgumentException e){factory = null;}return factory;}}
}
配置文件加入
<system.data>
<DbProviderFactories>
<add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data"/>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data"/>
<add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
<add name="OleDb Data Provider" invariant="System.Data.OleDb" description=".Net Framework Data Provider for OleDb" type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.58.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"/>
</DbProviderFactories>
</system.data>
Nuget包引入
MySql.Data 8.0.16
调用例子:
string connectionString = @"Server=XXXXXXXX;Database=XXXX;Uid=root;Pwd=XXXX;Port=3306;";string sql = "SELECT * FROM table1";DbUtility db = new DbUtility(connectionString, DbProviderType.MySql);DataTable data = db.ExecuteDataTable(sql, null);
C# 数据库通用类相关推荐
- C#.NET操作数据库通用类(MS SQL Server篇)
下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句.执行存储过程.以下是其详细实现过程,希望大家共同修改优化之.稍后将介绍如何使用它 ...
- C#.NET操作数据库通用类
下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句.执行存储过程.以下是其详细实现过程,希望大家共同修改优化之.稍后将介绍如何使用它 ...
- DbHelper数据库通用类使用方法
代码 //执行SQL语句 public static void ExecSqlCommand() { DbHelper db = new DbHelper(); DbCommand command = ...
- php mysql通用类_PHP连接MYSQL数据库通用类_PHP教程
include "mysql.php"; $db = new Dirver(); $db->DBLink($dbhost='localhost', $dbuser='root ...
- dbutility mysql_c# 数据库通用类DbUtility
public sealed classDbUtility {public string ConnectionString { get; set; }privateDbProviderFactory p ...
- java dbhelper通用类,DbHelper数据库通用类使用方法
代码 // 执行SQL语句 public static void ExecSqlCommand() { DbHelper db = new DbHelper(); DbCommand command ...
- 【ASP.NET开发】ASP.NET对SQLServer的通用数据库访问类
怎么说呢,作为程序员,我们明天都应该学习新的知识. 以前我在对数据库进行操作的时候都是在同一页面对数据库进行操作.这样的话,就是操作繁琐,而且需要重复的书写对数据库操作的代码,这样不仅浪费了很多的时间 ...
- 使用设计模式构建通用数据库访问类
在应用程序的设计中,数据库的访问是非常重要的,我们通常需要将对数据库的访问集中起来,以保证良好的封装性和可维护性.在.Net中,数据库的访问,对于微软自家的SqlServer和其他数据库(支持OleD ...
- 简单程序所需要的简单 asp.net通用数据库访问类
简单程序不需要分层,各页面共用相同的通用数据库访问类即可 using System; using System.Data; using System.Data.SqlClient; namespa ...
最新文章
- Delphi 与 DirectX 之 DelphiX(77): TDIB.Distort();
- 基于单目视觉的智能车辆视觉导航系统设计
- JS面向对象——class定义类、类的构造函数、实例方法、访问器方法、静态方法、继承、super、多态
- 前端开发工程师的定义(转帖)
- Linux 启动顺序
- php的弹出窗口,弹出窗口 PHP
- 解压zip报错_Get新技能!利用Python自动解压各种压缩文件
- 使用联想恢复盘安装正版Win7 Professional
- IR2104驱动原理
- 不使用vue-cli 搭建vue项目
- Excel处理数据技巧
- 文本框内容改变的绑定事件
- xp系统创建wifi连接服务器,xp笔记本连接无线wifi简便教程
- android手机CPU的浅显认识与比较
- 关于SE54视图簇的创建和维护
- 破天荒!苹果终于对 MacBook Air 大更新,还有全新 iPad Pro 和 Mac mini
- jd脚本 v4-bot 镜像部署和配置bot机器人
- 《陈式太极拳实用拳法》精要
- linux搭建mcpe服务器_在Linux的各个版本上安装、配置Minecraft服务器版
- 又一款因为安全问题垮掉的游戏