C# 工具類之資料庫鏈接

来源:http://www.cnblogs.com/Liyuting/archive/2017/06/20/7054288.html
-Advertisement-
Play Games

一、SQL Server 相關 1 /// <summary> 2 /// 資料庫的通用訪問代碼 3 /// 此類為抽象類, 4 /// 不允許實例化,在應用時直接調用即可 5 /// </summary> 6 public abstract class SqlHelper 7 { 8 /// <s ...


 一、SQL Server 相關

  1     /// <summary>
  2     /// 資料庫的通用訪問代碼 
  3     /// 此類為抽象類,
  4     /// 不允許實例化,在應用時直接調用即可
  5     /// </summary>
  6     public abstract class SqlHelper
  7     {
  8         /// <summary>
  9         /// 資料庫連接字元串
 10         /// </summary>
 11 
 12         public static string connectionString = "";
 13 
 14 
 15         // Hashtable to store cached parameters
 16         private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
 17 
 18         #region ExecteNonQuery操作方法集合
 19         /// <summary>
 20         ///執行一個不需要返回值的SqlCommand命令,通過指定專用的連接字元串。
 21         /// 使用參數數組形式提供參數列表 
 22         /// </summary>
 23         /// <param name="connectionString">一個有效的資料庫連接字元串</param>
 24         /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
 25         /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param>
 26         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
 27         /// <returns>返回一個數值表示此SqlCommand命令執行後影響的行數</returns>
 28         public static bool ExecteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
 29         {
 30             try
 31             {
 32                 SqlCommand cmd = new SqlCommand();
 33                 using (SqlConnection conn = new SqlConnection(connectionString))
 34                 {
 35                     //通過PrePareCommand方法將參數逐個加入到SqlCommand的參數集合中
 36                     PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
 37                     int val = cmd.ExecuteNonQuery();
 38                     //清空SqlCommand中的參數列表
 39                     cmd.Parameters.Clear();
 40                     return val > 0 ? true : false;
 41                 }
 42             }
 43             catch 
 44             {
 45                 return false;
 46             }
 47             
 48         }
 49 
 50         /// <summary>
 51         ///執行一個不需要返回值的SqlCommand命令,通過指定專用的連接字元串。
 52         /// 使用參數數組形式提供參數列表 
 53         /// </summary>
 54         /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
 55         /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param>
 56         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
 57         /// <returns>返回一個數值表示此SqlCommand命令執行後影響的行數</returns>
 58         public static bool ExecteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
 59         {
 60             try
 61             {
 62                 return ExecteNonQuery(connectionString, cmdType, cmdText, commandParameters);
 63             }
 64             catch 
 65             {
 66                 return false;
 67             }
 68 
 69         }
 70 
 71         /// <summary>
 72         ///存儲過程專用
 73         /// </summary>
 74         /// <param name="cmdText">存儲過程的名字</param>
 75         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
 76         /// <returns>返回一個數值表示此SqlCommand命令執行後影響的行數</returns>
 77         public static bool ExecteNonQueryProducts(string cmdText, params SqlParameter[] commandParameters)
 78         {
 79             try
 80             {
 81                 return ExecteNonQuery(CommandType.StoredProcedure, cmdText, commandParameters);
 82 
 83             }
 84             catch
 85             {
 86                 return false;
 87             }
 88         }
 89 
 90         /// <summary>
 91         ///Sql語句專用
 92         /// </summary>
 93         /// <param name="cmdText">T_Sql語句</param>
 94         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
 95         /// <returns>返回一個數值表示此SqlCommand命令執行後影響的行數</returns>
 96         public static bool ExecteNonQueryText(string cmdText, params SqlParameter[] commandParameters)
 97         {
 98             try
 99             {
100                 return ExecteNonQuery(CommandType.Text, cmdText, commandParameters);
101             }
102             catch 
103             {
104                 return false;
105             }
106            
107         }
108 
109         #endregion
110 
111 
112         #region GetTable操作方法集合
113 
114         /// <summary>
115         /// 執行一條返回結果集的SqlCommand,通過一個已經存在的資料庫連接
116         /// 使用參數數組提供參數
117         /// </summary>
118         /// <param name="connecttionString">一個現有的資料庫連接</param>
119         /// <param name="cmdTye">SqlCommand命令類型</param>
120         /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param>
121         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
122         /// <returns>返回一個表集合(DataTableCollection)表示查詢得到的數據集</returns>
123         public static DataTableCollection GetTable(string connecttionString, CommandType cmdTye, string cmdText, SqlParameter[] commandParameters)
124         {
125             try
126             {
127                 SqlCommand cmd = new SqlCommand();
128                 DataSet ds = new DataSet();
129                 using (SqlConnection conn = new SqlConnection(connecttionString))
130                 {
131                     PrepareCommand(cmd, conn, null, cmdTye, cmdText, commandParameters);
132                     SqlDataAdapter adapter = new SqlDataAdapter();
133                     adapter.SelectCommand = cmd;
134                     adapter.Fill(ds);
135                 }
136                 DataTableCollection table = ds.Tables;
137                 return table;
138             }
139             catch (Exception ex)
140             {
141                 return null;
142             }
143             
144         }
145 
146         /// <summary>
147         /// 執行一條返回結果集的SqlCommand,通過一個已經存在的資料庫連接
148         /// 使用參數數組提供參數
149         /// </summary>
150         /// <param name="cmdTye">SqlCommand命令類型</param>
151         /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param>
152         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
153         /// <returns>返回一個表集合(DataTableCollection)表示查詢得到的數據集</returns>
154         public static DataTableCollection GetTable(CommandType cmdTye, string cmdText, SqlParameter[] commandParameters)
155         {
156             try
157             {
158                 return GetTable(SqlHelper.connectionString, cmdTye, cmdText, commandParameters);
159             }
160             catch 
161             {
162                 return null;
163 
164             }
165             
166         }
167 
168         /// <summary>
169         /// 存儲過程專用
170         /// </summary>
171         /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param>
172         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
173         /// <returns>返回一個表集合(DataTableCollection)表示查詢得到的數據集</returns>
174         public static DataTableCollection GetTableProducts(string cmdText, SqlParameter[] commandParameters)
175         {
176             try
177             {
178                 return GetTable(CommandType.StoredProcedure, cmdText, commandParameters);
179             }
180             catch 
181             {
182                 return null;
183             }
184         }
185 
186         /// <summary>
187         /// Sql語句專用
188         /// </summary>
189         /// <param name="cmdText"> T-SQL 語句</param>
190         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
191         /// <returns>返回一個表集合(DataTableCollection)表示查詢得到的數據集</returns>
192         public static DataTableCollection GetTableText(string cmdText, SqlParameter[] commandParameters)
193         {
194             try
195             {
196                 return GetTable(CommandType.Text, cmdText, commandParameters);
197             }
198             catch 
199             {
200                 System.Windows.Forms.MessageBox.Show("查詢後臺出現錯誤,請重試!");
201                 return null;
202             }
203         }
204 
205         #endregion
206 
207 
208         #region 檢查是否存在
209         /// <summary>
210         /// 檢查是否存在 存在:true
211         /// </summary>
212         /// <param name="strSql">Sql語句</param>
213         /// <param name="cmdParms">參數</param>
214         /// <returns>bool結果</returns>
215         public static bool Exists(string strSql, params SqlParameter[] cmdParms)
216         {
217             try
218             {
219                 int cmdresult = Convert.ToInt32(ExecuteScalar(connectionString, CommandType.Text, strSql, cmdParms));
220                 if (cmdresult == 0)
221                 {
222                     return false;
223                 }
224                 else
225                 {
226                     return true;
227                 }
228             }
229             catch (Exception ex)
230             {
231                 return false;
232             }
233 
234         }
235         #endregion
236 
237 
238         #region 各方法SqlParameter參數處理
239         /// <summary>
240         /// 為執行命令準備參數
241         /// </summary>
242         /// <param name="cmd">SqlCommand 命令</param>
243         /// <param name="conn">已經存在的資料庫連接</param>
244         /// <param name="trans">資料庫事物處理</param>
245         /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
246         /// <param name="cmdText">Command text,T-SQL語句 例如 Select * from Products</param>
247         /// <param name="cmdParms">返回帶參數的命令</param>
248         private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
249         {
250             try
251             {
252                 //判斷資料庫連接狀態
253                 if (conn.State != ConnectionState.Open)
254                     conn.Open();
255                 cmd.Connection = conn;
256                 cmd.CommandText = cmdText;
257                 //判斷是否需要事物處理
258                 if (trans != null)
259                     cmd.Transaction = trans;
260                 cmd.CommandType = cmdType;
261                 if (cmdParms != null)
262                 {
263                     foreach (SqlParameter parm in cmdParms)
264                         cmd.Parameters.Add(parm);
265                 }
266             }
267             catch(Exception ex)
268             {
269                 MessageBox.Show("連接伺服器發生錯誤,請檢查!", "錯誤!", MessageBoxButtons.OK, MessageBoxIcon.Error);
270                 System.Environment.Exit(0);
271             }
272 
273         }
274 
275         #endregion
276 
277 
278         #region 其他查詢方法集合
279 
280         /// <summary>
281         /// 執行命令,返回一個在連接字元串中指定的資料庫結果集 
282         /// 使用所提供的參數。
283         /// </summary>
284         /// <param name="connectionString">一個有效的資料庫連接字元串</param>
285         /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
286         /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param>
287         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
288         /// <returns>A SqlDataReader containing the results</returns>
289         public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
290         {
291             SqlCommand cmd = new SqlCommand();
292             SqlConnection conn = new SqlConnection(connectionString);
293             // we use a try/catch here because if the method throws an exception we want to 
294             // close the connection throw code, because no datareader will exist, hence the 
295             // commandBehaviour.CloseConnection will not work
296             try
297             {
298                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
299                 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
300                 cmd.Parameters.Clear();
301                 return rdr;
302             }
303             catch
304             {
305                 conn.Close();
306                 throw;
307             }
308         }
309 
310         #region//ExecuteDataSet方法
311 
312         /// <summary>
313         /// return a dataset
314         /// </summary>
315         /// <param name="connectionString">一個有效的資料庫連接字元串</param>
316         /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
317         /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param>
318         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
319         /// <returns>return a dataset</returns>
320         public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
321         {
322             SqlCommand cmd = new SqlCommand();
323             try
324             {
325                 using (SqlConnection conn = new SqlConnection(connectionString))
326                 {
327                     PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
328                     SqlDataAdapter da = new SqlDataAdapter();
329                     DataSet ds = new DataSet();
330                     da.SelectCommand = cmd;
331                     da.Fill(ds);
332                     return ds;
333                 }
334             }
335             catch
336             {
337                 throw;
338             }
339         }
340 
341         /// <summary>
342         /// 返回一個DataSet
343         /// </summary>
344         /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
345         /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param>
346         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
347         /// <returns>return a dataset</returns>
348         public static DataSet ExecuteDataSet(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
349         {
350             return ExecuteDataSet(connectionString, cmdType, cmdText, commandParameters);
351         }
352 
353         /// <summary>
354         /// 返回一個DataSet
355         /// </summary>
356         /// <param name="cmdText">存儲過程的名字</param>
357         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
358         /// <returns>return a dataset</returns>
359         public static DataSet ExecuteDataSetProducts(string cmdText, params SqlParameter[] commandParameters)
360         {
361             return ExecuteDataSet(connectionString, CommandType.StoredProcedure, cmdText, commandParameters);
362         }
363 
364         /// <summary>
365         /// 返回一個DataSet
366         /// </summary>
367         /// <param name="cmdText">T-SQL 語句</param>
368         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
369         /// <returns>return a dataset</returns>
370         public static DataSet ExecuteDataSetText(string cmdText, params SqlParameter[] commandParameters)
371         {
372             return ExecuteDataSet(connectionString, CommandType.Text, cmdText, commandParameters);
373         }
374 
375         public static DataView ExecuteDataSet(string connectionString, string sortExpression, string direction, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
376         {
377             SqlCommand cmd = new SqlCommand();
378             try
379             {
380                 using (SqlConnection conn = new SqlConnection(connectionString))
381                 {
382                     PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
383                     SqlDataAdapter da = new SqlDataAdapter();
384                     DataSet ds = new DataSet();
385                     da.SelectCommand = cmd;
386                     da.Fill(ds);
387                     DataView dv = ds.Tables[0].DefaultView;
388                     dv.Sort = sortExpression + " " + direction;
389                     return dv;
390                 }
391             }
392             catch
393             {
394 
395                 throw;
396             }
397         }
398         #endregion
399 
400         #region // ExecuteScalar方法
401 
402         /// <summary>
403         /// 返回第一行的第一列
404         /// </summary>
405         /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
406         /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param>
407         /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
408         /// <returns>返回一個對象</returns>
409         public static object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
410         {
411             return ExecuteScalar(SqlHelper.connectionString, cmdType, cmdText, commandParameters);
412         }
413 
414         /// <summary>
415         /// 返回第一行的第一列存儲過程專用
416         /// </summary>
417         /// <param name="cmdText">存儲過程的名字</param>
418         /// <param name="commandParameters">
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用Thread類已經可以創建並啟動線程了,但是隨著開啟的線程越來越多,線程的創建和終止都需要手動操作,非常繁瑣,另一個問題是,開啟更多新的線程但是沒有用的線程沒有及時得到終止的時候,會占用越來越多的系統資源,影響性能。 所以,.net為我們引入了ThreadPool(線程池),我們只需要把要執行的 ...
  • 相關文章: "ASP.NET Core 使用 Hangfire 定時任務" ASP.NET Core Hangfire 在正式環境發佈之後,如果訪問 http://10.1.2.31:5000/hangfire/ 的話,會報 未授權錯誤,原因是 Hangfire 預設增加了授權配置。 解決方式: 增 ...
  • DotNetBar的視窗樣式丟失 C# 調用DotNetBar很方便,將DevComponents.DotNetBar2.dll和DevComponents.DotNetBar.Design.dll放在工程的Debug目錄下(下載地址)。將DevComponents.DotNetBar2.dll 直 ...
  • 我們先從最基礎的Thread說起。 創建並啟動線程 創建並啟動一個線程,如下代碼: 1 namespace ConsoleApplication17 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 var thread ...
  • 支付網關思考 目的 支付網關是為了屏蔽各種 支付工具之間的差異,對訂單系統行程一個統一的,標準的介面。如下圖所示 思路 事物補償機制 對賬 介面設計 1. 訂單狀態同步 bool UpdateOrderPaySatus(string orderId, int paySatas) 2. 預支付請求簽名 ...
  • 註意添加引用:System.Configuration; using System; using System.Collections.Generic; using System.Text; using System.Configuration; namespace DotNet.Utilities ...
  • 多線程在項目開發過程中非常非常重要,這個系列就來詳細總結一下,首先認識一下多線程。 windows為什麼要支持多線程 電腦的早期時代,操作系統沒有線程的概念,整個系統只運行著一個執行線程,其中包含操作系統代碼和應用程式代碼。只用一個執行線程的問題在於,長時間運行的任務會阻止其他任務的執行。例如16 ...
  • using System.Collections; using System.Text.RegularExpressions; namespace DotNet.Utilities { public class BarCodeToHTML { public static string get39(s ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...