C# 数据库封装

最近有些地方用到c#,研究了一下,也有数据库方面的操作,那就继续封装,自己用起来好用一点。

数据库连接

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Drawing;using System.Threading.Tasks;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Collections;using System.Configuration;
using System.Data.Common;namespace Simulation.Commons
{public class ConnectionPool{private static ConnectionPool cpool = null;//池管理对象private static Object objlock = typeof(ConnectionPool);//池管理对象实例private int size = 1;//池中连接数private int useCount = 0;//已经使用的连接数private ArrayList pool = null;//连接保存的集合private String ConnectionStr = "";//连接字符串public ConnectionPool(){//数据库连接字符串ConnectionStr = "server=localhost;User ID=root;Password=root;database=Test;Charset=utf8;";//创建可用连接的集合pool = new ArrayList();}#region 创建获取连接池对象public static ConnectionPool getPool(){lock (objlock){if (cpool == null){cpool = new ConnectionPool();}return cpool;}}#endregion#region 获取池中的连接public MySqlConnection getConnection(){lock (pool){MySqlConnection tmp = null;try{//可用连接数量大于0if (pool.Count > 0){//取第一个可用连接tmp = (MySqlConnection)pool[0];//在可用连接中移除此链接pool.RemoveAt(0);//不成功if (!isUserful(tmp)){//可用的连接数据已去掉一个useCount--;tmp = getConnection();}}else{//可使用的连接小于连接数量if (useCount <= size){try{//创建连接tmp = CreateConnection(tmp);}catch (Exception ex){System.Diagnostics.Debug.WriteLine("getConnection 异常信息:{0}", ex.Message);}}}//连接为nullif (tmp == null){//达到最大连接数递归调用获取连接否则创建新连接if (useCount <= size){tmp = getConnection();}else{tmp = CreateConnection(tmp);}}}catch (Exception ex){System.Diagnostics.Debug.WriteLine("getConnection异常信息:{0}", ex.Message);}return tmp;}}#endregion#region 创建连接private MySqlConnection CreateConnection(MySqlConnection tmp){//创建连接MySqlConnection conn = new MySqlConnection(ConnectionStr);try{while (conn.State != ConnectionState.Open)conn.Open();//可用的连接数加上一个useCount++;tmp = conn;}catch (Exception ex){conn.Close();System.Diagnostics.Debug.WriteLine("CreateConnection异常信息:{0}", ex.Message);}return tmp;}#endregion#region 关闭连接,加连接回到池中public void closeConnection(MySqlConnection con){lock (pool){if (con != null){//将连接添加在连接池中pool.Add(con);}}}#endregion#region 目的保证所创连接成功,测试池中连接private bool isUserful(MySqlConnection con){//主要用于不同用户bool result = true;if (con != null){string sql = "select 1";//随便执行对数据库操作MySqlCommand cmd = new MySqlCommand(sql, con);try{cmd.ExecuteScalar().ToString();}catch (Exception ex){con.Close();result = false;System.Diagnostics.Debug.WriteLine("isUserful异常信息:{0}", ex.Message);}}return result;}#endregion}
}

数据库操作封装

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text.RegularExpressions;
using System.Data;
using MySql.Data.MySqlClient;using System.Reflection;
using System.Text;
using System.Web.SessionState;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Dynamic;namespace Simulation.Commons
{public class SqlDatabase{public static  List<dynamic> QueryRecords(string strSql){MySqlConnection conn = null;conn = ConnectionPool.getPool().getConnection();List<dynamic> ObjectstateList = new List<dynamic>();try{MySqlCommand cmd = new MySqlCommand(strSql, conn);DataTable resultTable = new DataTable();using (MySqlDataAdapter da = new MySqlDataAdapter()){da.SelectCommand = cmd;da.Fill(resultTable);foreach (DataRow row in resultTable.Rows){dynamic obj = Activator.CreateInstance(new ExpandoObject().GetType());IDictionary<string, object> dict = obj;foreach (DataColumn column in resultTable.Columns){dict[column.ColumnName] = row[column.ColumnName];}ObjectstateList.Add(obj);}}}catch (Exception ex){System.Diagnostics.Debug.WriteLine("异常信息:{0}", ex.Message);}finally{ConnectionPool.getPool().closeConnection(conn);}return ObjectstateList;}public static JArray QueryRecord(string strSql){MySqlConnection conn = null;conn = ConnectionPool.getPool().getConnection();JArray jsonResult = new JArray();try{using (MySqlCommand cmd = new MySqlCommand(strSql, conn)){DataTable resultTable = new DataTable();using (MySqlDataAdapter da = new MySqlDataAdapter()){da.SelectCommand = cmd;da.Fill(resultTable);foreach (DataRow row in resultTable.Rows){JObject result = new JObject();foreach (DataColumn column in resultTable.Columns){switch (Type.GetTypeCode(row[column.ColumnName].GetType())){case TypeCode.String:string strValue = row[column.ColumnName].ToString();if (strValue.StartsWith("{") && strValue.EndsWith("}")){result[column.ColumnName] = JObject.Parse(strValue);}else if (strValue.StartsWith("[{") && strValue.EndsWith("}]")){result[column.ColumnName] = JArray.Parse(strValue);}else if (strValue.StartsWith("[") && strValue.EndsWith("]")){result[column.ColumnName] = JArray.Parse(strValue);}else{result[column.ColumnName] = row[column.ColumnName].ToString();}break;case TypeCode.Int32:result[column.ColumnName] = Convert.ToInt32(row[column.ColumnName].ToString());break;case TypeCode.Int64:result[column.ColumnName] = Convert.ToInt64(row[column.ColumnName].ToString());break;case TypeCode.Double:result[column.ColumnName] = Convert.ToDouble(row[column.ColumnName].ToString());break;default:result[column.ColumnName] = row[column.ColumnName].ToString();break;}}jsonResult.Add(result);}}}}catch (Exception ex){System.Diagnostics.Debug.WriteLine("异常信息:{0}", ex.Message);}finally{ConnectionPool.getPool().closeConnection(conn);}return jsonResult;}public static bool InsertDB(string tableName, JArray jsonValue){bool result = false;MySqlConnection conn = null;conn = ConnectionPool.getPool().getConnection();try{string strValues = "";string strNames = "";bool isColumn = true;for (int i = 0; i < jsonValue.Count(); i++){string strValue = "";foreach (var it in (JObject)jsonValue[i]){if (strValue == ""){strValue = string.Format("'{0}'", it.Value);if (isColumn){strNames = string.Format("`{0}`", it.Key);}}else{strValue += string.Format(",'{0}'", it.Value);if (isColumn){strNames += string.Format(",`{0}`", it.Key);}}}if (strValues == ""){strValues = string.Format("({0})", strValue);}else{strValues += string.Format(",({0})", strValue);}}string strSql = string.Format("INSERT INTO {0} ({1})  VALUES {2} ", tableName, strNames, strValues);using (MySqlCommand cmd = new MySqlCommand()){cmd.CommandTimeout = 5000;cmd.Connection = conn;cmd.CommandText = strSql;int value = cmd.ExecuteNonQuery();if (value >= 0) result = true;else result = false;}}catch (Exception ex){System.Diagnostics.Debug.WriteLine("异常信息:{0}", ex.Message);result = false;}finally{ConnectionPool.getPool().closeConnection(conn);}return result;}public static bool InsertDB(string tableName, JObject jsonValue){bool result = false;MySqlConnection conn = null;conn = ConnectionPool.getPool().getConnection();try{string strValues = "";string strNames = "";foreach (var it in jsonValue){if (strValues == ""){strValues = string.Format("'{0}'", it.Value);strNames = string.Format("`{0}`", it.Key);}else{strValues += string.Format(",'{0}'", it.Value);strNames += string.Format(",`{0}`", it.Key);}}string strSql = string.Format("INSERT INTO {0} ({1})  VALUES ({2}) ", tableName, strNames, strValues);using (MySqlCommand cmd = new MySqlCommand()){cmd.CommandTimeout = 5000;cmd.Connection = conn;cmd.CommandText = strSql;int value = cmd.ExecuteNonQuery();if (value >= 0) result = true;else result = false;}}catch (Exception ex){System.Diagnostics.Debug.WriteLine("异常信息:{0}", ex.Message);result = false;}finally{ConnectionPool.getPool().closeConnection(conn);}return result;      }public static bool UpdateDB(string tableName, JObject jsonValue, string strCondition){bool result = false;MySqlConnection conn = null;conn = ConnectionPool.getPool().getConnection();try{string strValues = "";foreach (var it in jsonValue){if (strValues == "" ){strValues = string.Format("{0}='{1}'",it.Key, it.Value);}else{strValues += string.Format(",{0}='{1}'", it.Key, it.Value);}}string strSql = string.Format("UPDATE  {0}  SET {1}  {2} ", tableName, strValues, strCondition);using (MySqlCommand cmd = new MySqlCommand()){cmd.Connection = conn;cmd.CommandText = strSql;int nValue = cmd.ExecuteNonQuery();if (nValue >= 0) result = true;else result = false;}}catch (Exception ex){System.Diagnostics.Debug.WriteLine("异常信息:{0}", ex.Message);result = false;}finally{ConnectionPool.getPool().closeConnection(conn);}return result;}public static bool DeleteDB(string strSql){bool result = false;MySqlConnection conn = null;conn = ConnectionPool.getPool().getConnection();try{using (MySqlCommand cmd = new MySqlCommand()){cmd.Connection = conn;cmd.CommandText = strSql;int nValue = cmd.ExecuteNonQuery();if (nValue >= 0) result = true;else result = false;}}catch (Exception ex){System.Diagnostics.Debug.WriteLine("异常信息:{0}", ex.Message);result = false;}finally{ConnectionPool.getPool().closeConnection(conn);}return result;}public static int QueryCount(string strSql){int result = 0;MySqlConnection conn = null;conn = ConnectionPool.getPool().getConnection();try{string strSqlCount = string.Format(" SELECT COUNT(*) AS Cnt FROM  ({0}) t ", strSql);using (MySqlCommand cmd = new MySqlCommand(strSqlCount, conn)){using (MySqlDataReader reader = cmd.ExecuteReader()){while (reader.Read()){result = reader.GetInt32("Cnt");}}}}catch (Exception ex){System.Diagnostics.Debug.WriteLine("异常信息:{0}", ex.Message);}finally{ConnectionPool.getPool().closeConnection(conn);}return result;}}
}

返回都是以json格式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/165329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode算法系列| 1. 两数之和(四种解法)

目录 1.题目2.题解解法一&#xff1a;暴力枚举解法二&#xff1a;哈希表解法解法三&#xff1a;双指针(有序状态)解法四&#xff1a;二分查找(有序状态) 1.题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数…

『RabbitMQ』入门指南(安装,配置,应用)

前言 RabbitMQ 是在 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09; 协议标准基础上完整的&#xff0c;可复用的企业消息系统。它遵循 Mozilla Public License 开源协议&#xff0c;采用 Erlang 实现的工业级的消息队列(MQ)服务器&#xff0c;建立在 Erlang …

产品经理提问常用的ChatGPT通用提示词模板

如何评估产品市场的潜力和可行性&#xff1f; 如何定义和明确产品的目标用户和需求&#xff1f; 如何进行竞品分析和比较&#xff0c;制定产品的差异化策略&#xff1f; 如何设计产品的功能和特性&#xff0c;满足用户需求&#xff1f; 如何制定产品的定价策略和销售计划&a…

qml View3D使用介绍

在Qt Quick 3D中,View3D 是一个用于展示 3D 内容的 QML 类型。View3D 允许你将 3D 场景集成到 Qt Quick 2D 用户界面中,这意味着你可以在传统的 2D UI 元素(如按钮、文本和图像)与 3D 图形之间无缝地进行整合。 View3D 提供了一个视口,用于渲染 3D 场景。它可以包括多个 …

HTTPS攻击怎么防御?

HTTPS 简介 超文本传输安全协议&#xff08; HTTPS &#xff09;是一种通过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信&#xff0c;但利用 SSL/TLS 来加密数据包。 HTTPS 开发的主要目的&#xff0c;是提供对网站服务器的身份认证&#xff0c;保护交换数据的…

批量将本地N个英文Html文档进行中文翻译-操作篇

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

QtCreator9.02不支持JDK11解决

最终效果 使用Android Studio 下载Android SDK Platform 31与Sources for Android 31 下载Android SDK Build Tools 31.0.0 下载NDK 25.1 ,23.1 ,21.3 重要: 下载Android SDK Command-Line Tools ,选择10.0或者9.0其中一个版本 其它版本不支持JDK11 ,本例选择10.0 下载CMak…

如何进行MySQL的主从复制(MySQL5.7)

背景&#xff1a;在一些Web服务器开发中&#xff0c;系统用户在进行数据访问时&#xff0c;基本都是直接操作数据库MySQL进行访问&#xff0c;而这种情况下&#xff0c;若只有一台MySQL服务器&#xff0c;可能会存在如下问题 数据的读和写的所有压力都会由一台数据库独…

浅析jdk8所包含的主要特性

至今Java 8仍然是许多开发者首选的JDK版本&#xff0c;Java 8的生态系统非常成熟&#xff0c;许多库和框架都已经适配了Java 8。迁移到新的Java版本可能需要重新评估和调整现有的依赖关系&#xff0c;这对于一些大型项目可能是一个挑战。那么Java 8有哪些特性让多数开发者钟爱呢…

西米支付:如何设计和构建游戏支付系统?

如何设计和构建游戏支付系统&#xff1f; 目前&#xff0c;游戏开发中最常见的支付方式包括微信支付、支付宝支付和苹果支付等。今天&#xff0c;我将与大家分享游戏支付系统的架构和设计。 游戏支付的主要业务流程是指游戏玩家在游戏中购买虚拟物品或服务所进行的支付过程。一…

ElasticSearch 7 SQL 详解

平时使用Elasticsearch的时候,会在Kibana中使用Query DSL来查询数据.每次要用到Query DSL时都基本忘光了,需要重新在回顾一遍,最近发现Elasticsearch已经支持SQL查询了(6.3版本以后),整理了下一些用法. 简介 Elasticsearch SQL是一个X-Pack组件,它允许针对Elasticsearch实时执…

ESP32之避障

ESP32之避障 图片 程序 int Led27;//定义LED 接口 int buttonpin4; //定义光遮断传感器接口 int val;//定义数字变量val void setup() { pinMode(Led,OUTPUT);//定义LED 为输出接口 pinMode(buttonpin,INPUT);//定义避障传感器为输出接口 } void loop() {Serial.begin(9600);…

保姆级 Keras 实现 YOLO v3 一

保姆级 Keras 实现 YOLO v3 一 一. YOLO v3 总览二. 特征提取网络特征提取网络代码实现 三. 特征融合特征融合代码实现 四. 网络输出模型输出代码实现 五. 网络模型代码实现六. 代码下载 如果要给 YOLO 目标检测算法一个评价的话, 就是快和准, 现在已经到了 v8, 但是我为什么还…

如何开启MySQL的慢查询日志

说明&#xff1a;如果需要查看某一条SQL查询速度慢&#xff0c;并对慢的SQL进行优化&#xff0c;那么开启MySQL慢查询日志是一定要做的事情&#xff0c;本文介绍如何开启MySQL的慢查询日志&#xff1b; 查看MySQL慢查询是否开启 首先&#xff0c;输入下面的命令&#xff0c;查…

为什么 x86 操作系统从 0x7c00 处开始

0x00&#xff1a;x86 架构 BIOS 引导加载程序中的"0x7C00"之谜 你知道 x86 操作系统中的"0x7C00"这个神奇数字吗 ? "0x7C00" 是BIOS加载MBR&#xff08;主引导记录&#xff0c;磁盘中的第一个扇区&#xff09;的内存地址。操作系统或引导加载…

2-Linux学习环境搭建

1 Linux学习环境搭建 1.1 虚拟化介绍 # win 机器----》装一个虚拟化软件----》虚拟化出linux操作系统# kvm vmware openstack docker k8s # kvm vmware 虚拟化软件 -运行在linux上&#xff0c;做虚拟化的软件 -vmware运行在win&#xff0c;linux&#xff0c;商业软件…

AMEYA360:瑞萨面向高端工业传感器系统推出高精度模拟前端的32位RX MCU

全球半导体解决方案供应商瑞萨电子&#xff08;TSE&#xff1a;6723&#xff09;宣布面向高端工业传感器系统推出一款全新RX产品——RX23E-B&#xff0c;扩展32位微控制器&#xff08;MCU&#xff09;产品线。新产品作为广受欢迎的RX产品家族的一员&#xff0c;具有高精度模拟前…

hadoop2.x linux集群部署

hadoop2.x 集群部署 下载hadoop需要提前准备好jdk1.8 和rsync 和ssl集群信息解压安装配置环境变量配置site配置文件(/hadoop/etc/hadoop目录下)core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xmlhadoop-env.sh要追加java_home!配置节点slaves 配置免密ssh访问没有ssh-co…

【计算方法与科学建模】矩阵特征值与特征向量的计算(四):乘幂法及其python实现

文章目录 一、Jacobi 旋转法二、Jacobi 过关法三、Householder 方法四、乘幂法 矩阵的特征值&#xff08;eigenvalue&#xff09;和特征向量&#xff08;eigenvector&#xff09;在很多应用中都具有重要的数学和物理意义。 本文将详细介绍乘幂法的基本原理和步骤&#xff0c;并…

【JavaSE】基础笔记 - 异常(Exception)

目录 1、异常的概念和体系结构 1.1、异常的概念 1.2、 异常的体系结构 1.3 异常的分类 2、异常的处理 2.1、防御式编程 2.2、异常的抛出 2.3、异常的捕获 2.3.1、异常声明throws 2.3.2、try-catch捕获并处理 3、自定义异常类 1、异常的概念和体系结构 1.1、异常的…