C#利用IDbDataAdapter/IDataReader實(shí)現(xiàn)通用數(shù)據(jù)集獲取
關(guān)于數(shù)據(jù)集
在.net 應(yīng)用中,與數(shù)據(jù)庫(kù)進(jìn)行連接并查詢(xún)相關(guān)數(shù)據(jù),填充到數(shù)據(jù)集是我們經(jīng)常用到的功能,數(shù)據(jù)集的表現(xiàn)形式基本包括如下:
1、 DataSet
DataSet 是 ADO.NET 中的數(shù)據(jù)集合對(duì)象,可以通過(guò) IDbDataAdapter 接口對(duì)象,其表示一組與命令有關(guān)的屬性,用于填充 DataSet 和更新數(shù)據(jù)源。DataSet 相當(dāng)于內(nèi)存中的數(shù)據(jù)庫(kù),可以容納復(fù)雜關(guān)系的數(shù)據(jù),而且即使斷開(kāi)數(shù)據(jù)鏈路,依然可以繼續(xù)獨(dú)立的操作。生成的 DataSet 由一組 DataTable 對(duì)象組成,即數(shù)據(jù)表集合。
2、 DataReader
DataReader 也是數(shù)據(jù)集的一種形式,它與 DataSet 的區(qū)別在于,其只允許以只讀、順序向下的方式查看其中所存儲(chǔ)的數(shù)據(jù),高效和簡(jiǎn)單,是一種非常節(jié)省資源的數(shù)據(jù)對(duì)象,如果我們不考慮后續(xù)操作,只是顯示數(shù)據(jù),則 DataReader 對(duì)象幾乎是首選。
生成數(shù)據(jù)集對(duì)象需要利用 ADO.NET 中的數(shù)據(jù)提供者對(duì)象包括IDbConnection、IDbCommand、IDbDataParameter等,如何使用這些對(duì)象請(qǐng)參考我的文章:
《C#實(shí)現(xiàn) IDbConnection / IDbCommand 等相關(guān)通用數(shù)據(jù)接口》
本文將介紹如何通過(guò)利用IDbDataAdapter / IDataReader 實(shí)現(xiàn)通用數(shù)據(jù)集獲取。
獲取數(shù)據(jù)集的執(zhí)行流程
首先需要?jiǎng)?chuàng)建連接對(duì)象,成功后下達(dá)符合對(duì)應(yīng)數(shù)據(jù)庫(kù)規(guī)范的命令指令,該指令可能包括需要的參數(shù)對(duì)象(需要定義名稱(chēng)和賦值等操作),通過(guò)數(shù)據(jù)適配器 IDbDataAdapter 接口對(duì)象填充到DataSet或通過(guò)命令對(duì)象() ExecuteReader 填充到 DataReader,大體流程如下圖:
范例運(yùn)行環(huán)境
操作系統(tǒng): Windows Server 2019 DataCenter
.net版本: .netFramework4.7.1 或以上
開(kāi)發(fā)工具:VS2019 C#
數(shù)據(jù)庫(kù):在這里我們以支持 Oracle 9i、MS SQL Server 2016、國(guó)產(chǎn)達(dá)夢(mèng)數(shù)據(jù) 8 為例
通用對(duì)象的設(shè)計(jì)與實(shí)現(xiàn)
引用
在實(shí)現(xiàn)方法前請(qǐng)引用如下代碼:
using System.Data; using System.Data.SqlClient; using System.Data.OracleClient; using Dm; using System.Collections;
GetDataAdapter方法
GetDataAdapter 方法返回 System.Data.IDbDataAdapter 數(shù)據(jù)適配器對(duì)象,其參數(shù)說(shuō)明見(jiàn)下表:
序號(hào) | 參數(shù)名 | 類(lèi)型 | 說(shuō)明 |
---|---|---|---|
1 | dbServerType | string | 目前支持 "oracle"、 "dm8",其它字符串均視為 MS SQL Server |
實(shí)現(xiàn)代碼如下:
public System.Data.IDbDataAdapter GetDataAdapter(string dbservertype) { IDbDataAdapter adp = null; switch (dbservertype.ToLower()) { case "oracle": adp =new OracleDataAdapter(); break; case "dm8": adp = new DmDataAdapter(); break; default: adp =new SqlDataAdapter(); break; } return adp; }
獲取數(shù)據(jù)集的設(shè)計(jì)與實(shí)現(xiàn)
GetDataSet方法
GetDataSet 方法返回 object 對(duì)象,如果生成成功則返回 DataSet 對(duì)象,失敗則返回錯(cuò)誤信息字符串,其參數(shù)說(shuō)明見(jiàn)下表:
序號(hào) | 參數(shù)名 | 類(lèi)型 | 說(shuō)明 |
---|---|---|---|
1 | DbServerType | string | 目前支持 "oracle"、 "dm8",其它字符串均視為 MS SQL Server |
2 | strConn | string | 對(duì)應(yīng)數(shù)據(jù)庫(kù)的連接字符串 |
3 | _sql | string | 要執(zhí)行的SQL語(yǔ)句命令行 |
4 | paras | ArrayList | 要賦值的參數(shù)對(duì)象,逐個(gè)添加到ArrayList里,請(qǐng)注意參數(shù)為實(shí)體數(shù)據(jù)參數(shù)對(duì)象,如 MS SQL Server ,請(qǐng)傳遞如下代碼: ArrayList.Add(new SqlParameter("參數(shù)名",參數(shù)值)); |
5 | ct | CommandType | System.Data.CommandType 枚舉,可包括: StoredProcedure(存儲(chǔ)過(guò)程) TableDirect(直接表查詢(xún)) Text(文本查詢(xún))該值為默認(rèn)值 |
有關(guān) CommandType 的更多資料請(qǐng)參考如下鏈接:
https://learn.microsoft.com/zh-CN/dotnet/api/system.data.commandtype
實(shí)現(xiàn)代碼如下:
public object GetDataSet(string DbServerType,string strConn,string _sql,ArrayList paras,CommandType ct) { System.Data.IDbConnection Conn=GetConnection(DbServerType,strConn); System.Data.IDbCommand Cmd=GetCommand(DbServerType,_sql,paras,Conn); Cmd.CommandType=ct; DataSet ds=new DataSet(); try { ds.EnforceConstraints=false; Conn.Open(); System.Data.IDbDataAdapter adp=GetDataAdapter(DbServerType); adp.SelectCommand=Cmd; adp.FillSchema(ds,System.Data.SchemaType.Mapped); adp.Fill(ds); return ds; } catch (Exception e) { return e.Message; } finally { if(Conn.State==ConnectionState.Open) { Conn.Close(); } } }
GetReaderData方法
GetReaderData 方法返回 IDataReader 對(duì)象,其參數(shù)說(shuō)明見(jiàn)下表:
序號(hào) | 參數(shù)名 | 類(lèi)型 | 說(shuō)明 |
---|---|---|---|
1 | DbServerType | string | 目前支持 "oracle"、 "dm8",其它字符串均視為 MS SQL Server |
2 | strConn | string | 對(duì)應(yīng)數(shù)據(jù)庫(kù)的連接字符串 |
3 | _sql | string | 要執(zhí)行的SQL語(yǔ)句命令行 |
4 | paras | ArrayList | 要賦值的參數(shù)對(duì)象,逐個(gè)添加到ArrayList里,請(qǐng)注意參數(shù)為實(shí)體數(shù)據(jù)參數(shù)對(duì)象,如 MS SQL Server ,請(qǐng)傳遞如下代碼: ArrayList.Add(new SqlParameter("參數(shù)名",參數(shù)值)); |
5 | ct | CommandType | System.Data.CommandType 枚舉,可包括: StoredProcedure(存儲(chǔ)過(guò)程) TableDirect(直接表查詢(xún)) Text(文本查詢(xún))該值為默認(rèn)值 |
有關(guān) CommandType 的更多資料請(qǐng)參考如下鏈接:
https://learn.microsoft.com/zh-CN/dotnet/api/system.data.commandtype
實(shí)現(xiàn)代碼如下:
public System.Data.IDataReader GetDataReader2(string DbServerType,string strConn,string _sql, ArrayList paras, CommandType ct) { System.Data.IDbConnection Conn = GetConnection(DbServerType, strConn); System.Data.IDbCommand Cmd = GetCommand(DbServerType, _sql, paras, Conn); Cmd.CommandType = ct; Cmd.Connection = Conn; Conn.Open(); return Cmd.ExecuteReader(); }
小結(jié)
有關(guān)更多關(guān)于數(shù)據(jù)接口對(duì)象請(qǐng)參考如下鏈接:
https://learn.microsoft.com/zh-CN/dotnet/api/system.data.idataadapter?view=netcore-3.1
IDbConnection 接口 (Microsoft.ReportingServices.DataProcessing) | Microsoft Learn
IDbConnection 接口 (Microsoft.ReportingServices.DataProcessing) | Microsoft Learn
到此這篇關(guān)于C#利用IDbDataAdapter/IDataReader實(shí)現(xiàn)通用數(shù)據(jù)集獲取的文章就介紹到這了,更多相關(guān)C#通用數(shù)據(jù)集獲取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#生成圖形驗(yàn)證碼的實(shí)現(xiàn)方式
我們當(dāng)用戶(hù)登錄系統(tǒng)時(shí)經(jīng)常會(huì)用到圖形驗(yàn)證碼技術(shù),要求用戶(hù)識(shí)別圖片中的內(nèi)容,并正確輸入,方可嘗試登錄,因此,圖形驗(yàn)證碼是一個(gè)網(wǎng)絡(luò)安全技術(shù)手段,圖形驗(yàn)證碼的呈現(xiàn)形式有很多種,這里我們將介紹最基本的生成方式,感興趣的朋友可以參考下2024-04-04C#實(shí)現(xiàn)將CSV轉(zhuǎn)為XLSX文件
Microsoft?Excel的XLSX格式以及基于文本的CSV(逗號(hào)分隔值)格式,是數(shù)據(jù)交換中常見(jiàn)的文件格式,本文主要介紹了如何在C#中以編程的方式將CSV文件轉(zhuǎn)化為XLSX?文件,需要的可以參考下2024-03-03C#使用Newtonsoft.Json中的JObject對(duì)象
本文詳細(xì)講解了C#使用Newtonsoft.Json中JObject對(duì)象的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07淺談C#中ToString()和Convert.ToString()的區(qū)別
本文介紹了ToString()和Convert.ToString()的使用方法,他們之間的區(qū)別,以及從object到string的轉(zhuǎn)換方法,希望對(duì)學(xué)習(xí)C#編程的你有所幫助2016-11-11C#在foreach遍歷刪除集合中元素的三種實(shí)現(xiàn)方法
這篇文章主要給大家總結(jié)介紹了關(guān)于C#在foreach遍歷刪除集合中元素的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12C#值類(lèi)型、引用類(lèi)型中的Equals和==的區(qū)別淺析
這篇文章主要介紹了C#值類(lèi)型、引用類(lèi)型中的Equals和==的區(qū)別淺析,本文分別對(duì)C#值類(lèi)型和引用類(lèi)型中的Equals和==做了講解和給出了實(shí)例,需要的朋友可以參考下2015-01-01VS2019配置OpenCV4.1.0詳細(xì)教程與測(cè)試代碼(推薦)
這篇文章主要介紹了VS2019配置OpenCV4.1.0詳細(xì)教程與測(cè)試代碼,本文通過(guò)截圖實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03