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.pswp.cn/news/165329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165329.shtml
英文地址,請注明出處:http://en.pswp.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、異常的…