.NET中封裝SqlHelper
SqlHelper是一個基於.NET Framework的資料庫操作元件,將運算元據庫常用的方法封裝到SqlHelper中,可以提高程式碼編寫效率,減少冗餘程式碼。下面將詳細示例一個自己封裝的SqlHelper,並展示如何使用它。
1、因為連線字串可能會根據不同需求而經常發生改變,所以要在App.config的xml檔案中寫上連線字串。當連線字串發生改變時,無需更改專案中的原始碼,只要更改配置檔案即可。如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<!--以下,是連線字串-->
<connectionStrings>
<add name="mssqlserver" connectionString="Data Source=fuqin-pc;Initial Catalog=PhoneNumManager;Integrated Security=true"/>
</connectionStrings>
<!--以上-->
</configuration>
2、建立一個類,命名為SqlHelper
3、封裝SqlHelper。注意:封裝ExecuteReader:因為這個方法涉及到連線池的問題。所以和以上的兩種方法有一定的差別,放一段程式碼。在這裡建立連線物件的時候不能using起來,using被翻譯成try { }finally { },在返回cmd.ExecuteReader的時候不能把連線關了,所以不能將SqlConnection conn = new SqlConnection(constr);給using起來。如果部using起來,那每次呼叫這個方法都會有一個物件放在連線池裡面,所以可以在返回的cmd.ExecuteReader裡面寫上一個過載cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);這樣在返回的後關閉reader的同時將conn這個連線物件給關閉。由於建立連線物件的時候沒有using起來,所以在返回的時候可能報異常,因此要將開啟連線和返回這兩條語句給try起來。
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 繫結DataGridView
{
/// <summary>
/// 因為SqlHelper不需要建立物件,所以將其設定為靜態類
/// </summary>
public static class SqlHelper
{
/*
* 連線字串只需要在類的內部被訪問,且不能隨意更改連線字串的內容,所以將其設為私有的只讀欄位
* ConfigurationManager類需要新增引用System.Configuration,並匯入名稱空間
*/
private static readonly string constr = ConfigurationManager.ConnectionStrings["mssqlserver"].ConnectionString;
/// <summary>
/// 用來執行增刪改的方法
/// </summary>
/// <param name="sql">要傳入的sql語句</param>
/// <param name="pms">sql語句中的引數</param>
/// <returns>返回影響的行數</returns>
public static int ExecuteNonQuery(string sql, params SqlParameter[] pms)
{
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
con.Open();
return cmd.ExecuteNonQuery();
}
}
}
/*
* 用來執行返回單個結果的方法
*/
public static object ExecuteScalar(string sql, params SqlParameter[] pms)
{
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
con.Open();
return cmd.ExecuteScalar();
}
}
}
/*
* 用來執行返回多行多列的方法
*/
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] pms)
{
SqlConnection con = new SqlConnection(constr);
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
try
{
con.Open();
/*
* System.Data.CommandBehavior.CloseConnection這個列舉引數,表示將來使用完畢SqlDataReader後,在關閉reader的同時,在SqlDataReader內部會將關聯的Connection物件也關閉掉
*/
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
catch
{
con.Close();
con.Dispose();
throw;
}
}
}
/*
* ExecuteAdapter的方法,返回的類是DataTable的型別。
*/
public static DataTable ExecuteDataTable(string sql, params SqlParameter[] pms)
{
DataTable dataTable = new DataTable();
using (SqlDataAdapter adapter=new SqlDataAdapter(sql,constr))
{
if (pms != null) adapter.SelectCommand.Parameters.AddRange(pms);
adapter.Fill(dataTable);
}
return dataTable;
}
}
}
至此,完成了整個SqlHelper的封裝,類中共封裝了四個常用的方法。相關文章
- 【.net基礎】--SQLHelper重構SQL
- SqlHelper:SQL
- 專案中封裝axios封裝iOS
- BaseActivity中封裝通用的Toolbar封裝
- 在Flutter中封裝redux的使用Flutter封裝Redux
- Simulink中封裝子系統封裝
- OLEDB SqlHelperSQL
- SQLHelper 2.0SQL
- vue.js中封裝全域性filterVue.js封裝Filter
- SqlHelper和DBHelperSQL
- 在webview_flutter中封裝JSBridgeWebViewFlutter封裝JS
- Vue中封裝axios傳送請求Vue封裝iOS
- 在Vue中封裝一個select元件Vue封裝元件
- 微軟原版SQLHelper類微軟SQL
- 使用DLL檔案中封裝的視窗 (轉)封裝
- WPF中封裝一個自己的MessageBox封裝
- 【學習筆記】ASP.NET簡易的SQLHelper幫助類筆記ASP.NETSQL
- 分享幾個我工作中封裝的typeScript方法封裝TypeScript
- MapStruct在專案中封裝實踐-帶原始碼Struct封裝原始碼
- C++中封裝和繼承的訪問許可權C++封裝繼承訪問許可權
- sqlHelper類的中文 詳細註釋SQL
- 在vue中封裝一個從右至左滾動公告的元件Vue封裝元件
- 分享一個自己寫的C# SqlHelperC#SQL
- DjangoRestFramework框架三種分頁功能的實現 - 在DjangoStarter專案模板中封裝DjangoRESTFramework框架封裝
- 『無為則無心』Python物件導向 — 53、對Python中封裝的介紹Python物件封裝
- 聊天室軟體原始碼中封裝一個金額輸入框元件的實現原始碼封裝元件
- python 中封裝日誌 logging,為何列印行號固定在同一行?Python封裝
- 15 ##### 適合繫結方法的場景:在物件中封裝值,在方法中讀取物件的值物件封裝
- C# SQLiteHelper類似SqlHelper類實現存取Sqlite資料庫C#SQLite資料庫
- kubernetes 安裝
- 安裝 kubernetes
- sqlhelper整合dynamic多資料來源的分頁問題(非教學向)SQL
- Kubernetes的安裝
- 無法安裝onethink
- .net core 常用安裝包
- Kubernetes Dashboard 安裝
- [kubernetes]helm安裝
- Ubuntu安裝KubernetesUbuntu