一文簡(jiǎn)單了解C#?中的DataSet類(lèi)
前言
今天我們一起學(xué)習(xí)一下DataSet類(lèi),DataSet類(lèi)官方的表示是這樣的:"表示數(shù)據(jù)的內(nèi)存中緩存",大致意思就是我們把數(shù)據(jù)去取出來(lái),然后把數(shù)據(jù)給DataSet,再對(duì)DataSet做數(shù)據(jù)處理,這樣似乎可以對(duì)數(shù)據(jù)做更快的處理,相當(dāng)于一個(gè)臨時(shí)的數(shù)據(jù)庫(kù),數(shù)據(jù)是從數(shù)據(jù)庫(kù)檢索的記錄的緩存,數(shù)據(jù)集DataSet中不僅包含一個(gè)或多個(gè)表,還可以包括數(shù)據(jù)表之間的關(guān)系和約束。允許將不同類(lèi)型的數(shù)據(jù)表復(fù)制到同一個(gè)數(shù)據(jù)集中,甚至還允許將數(shù)據(jù)表與XML文檔組合到一起協(xié)同操作。數(shù)據(jù)集從數(shù)據(jù)源中獲取數(shù)據(jù)以后就斷開(kāi)了與數(shù)據(jù)源之間的連接。允許在數(shù)據(jù)集中定義數(shù)據(jù)約束和表關(guān)系,增添、刪除和編輯記錄,還可以對(duì)數(shù)據(jù)集中的數(shù)據(jù)進(jìn)行查詢(xún)、統(tǒng)計(jì)等。當(dāng)完成各項(xiàng)數(shù)據(jù)操作后,還可以將數(shù)據(jù)集中的最新數(shù)據(jù)更新到數(shù)據(jù)源。
DataSet屬性和方法
//屬性 CaseSensitive ? //獲取或設(shè)置一個(gè)值,該值指示 DataTable 對(duì)象中的字符串比較是否區(qū)分大小寫(xiě)。 Container ? //獲取組件的容器。 (DataSetName ? ? //獲取或設(shè)置當(dāng)前 DataSet 的名稱(chēng)。 DefaultViewManager ? //獲取 DataSet 所包含的數(shù)據(jù)的自定義視圖,以允許使用自定義的 DataViewManager 進(jìn)行篩選、搜索和導(dǎo)航。 DesignMode ? //獲取指示組件當(dāng)前是否處于設(shè)計(jì)模式的值。 (EnforceConstraints //獲取或設(shè)置一個(gè)值,該值指示在嘗試執(zhí)行任何更新操作時(shí)是否遵循約束規(guī)則。 Events ? //獲取附加到該組件的事件處理程序的列表。 (ExtendedProperties //獲取與 DataSet 相關(guān)的自定義用戶(hù)信息的集合。 HasErrors ? //獲取一個(gè)值,指示在此 DataTable 中的任何 DataSet 對(duì)象中是否存在錯(cuò)誤。 IsInitialized ? //獲取一個(gè)值,該值指示是否已初始化 DataSet。 Locale ? //獲取或設(shè)置用于比較表中字符串的區(qū)域設(shè)置信息。 Namespace ? //獲取或設(shè)置 DataSet 的命名空間。 Prefix ? //獲取或設(shè)置一個(gè) XML 前綴,該前綴是 DataSet 的命名空間的別名。 Relations ? //獲取用于將表鏈接起來(lái)并允許從父表瀏覽到子表的關(guān)系的集合。 RemotingFormat ? //獲取或設(shè)置遠(yuǎn)程處理期間使用的序列化格式 DataSet 。 SchemaSerializationMode //獲取或設(shè)置 SchemaSerializationMode 的 DataSet。 Site ? ? //獲取或設(shè)置 ISite 的 DataSet。 Tables ? //獲取包含在 DataSet 中的表的集合。
//方法 AcceptChanges() //提交自加載此 DataSet 或上次調(diào)用 AcceptChanges() 以來(lái)對(duì)其進(jìn)行的所有更改。 BeginInit() //開(kāi)始初始化在窗體上使用或由另一個(gè)組件使用的 DataSet。 初始化發(fā)生在運(yùn)行時(shí)。 Clear() //通過(guò)移除所有表中的所有行來(lái)清除任何數(shù)據(jù)的 DataSet。 Clone() 復(fù)制 DataSet 的結(jié)構(gòu),包括所有 DataTable 架構(gòu)、關(guān)系和約束。 不要復(fù)制任何數(shù)據(jù)。 Copy() ? 復(fù)制該 DataSet 的結(jié)構(gòu)和數(shù)據(jù)。 CreateDataReader() ? 為每個(gè) DataTableReader 返回帶有一個(gè)結(jié)果集的 DataTable,順序與 Tables 集合中表的顯示順序相同。 CreateDataReader(DataTable[]) ? 為每個(gè) DataTableReader 返回帶有一個(gè)結(jié)果集的 DataTable。 DetermineSchemaSerializationMode(SerializationInfo, StreamingContext) ? 確定 SchemaSerializationMode 的 DataSet。 DetermineSchemaSerializationMode(XmlReader) 確定 SchemaSerializationMode 的 DataSet。 Dispose() ? 釋放由 MarshalByValueComponent 使用的所有資源。 (Dispose(Boolean) ? 釋放由 MarshalByValueComponent 占用的非托管資源,還可以另外再釋放托管資源。 (EndInit() ? 結(jié)束在窗體上使用或由另一個(gè)組件使用的 DataSet 的初始化。 初始化發(fā)生在運(yùn)行時(shí)。 Equals(Object) ? 確定指定對(duì)象是否等于當(dāng)前對(duì)象。 GetChanges() ? ? 獲取 DataSet 的副本,該副本包含自加載以來(lái)或自上次調(diào)用 AcceptChanges() 以來(lái)對(duì)該數(shù)據(jù)集進(jìn)行的所有更改。 GetChanges(DataRowState) ? ? 獲取由 DataRowState 篩選的 DataSet 的副本,該副本包含上次加載以來(lái)或調(diào)用 AcceptChanges() 以來(lái)進(jìn)行的所有更改。 GetDataSetSchema(XmlSchemaSet) ? 獲取數(shù)據(jù)集的 XmlSchemaSet 的副本。 GetHashCode() ? 作為默認(rèn)哈希函數(shù)。 GetObjectData(SerializationInfo, StreamingContext) ? 使用序列化 DataSet 時(shí)所需的數(shù)據(jù)填充序列化信息對(duì)象。 GetSchemaSerializable() 返回一個(gè)可序列化的 XmlSchema 實(shí)例。 GetSerializationData(SerializationInfo, StreamingContext) ? 從二進(jìn)制或 XML 流反序列化表數(shù)據(jù)。 GetService(Type) ? ? 獲取 IServiceProvider 的實(shí)施者。 (GetType() ? 獲取當(dāng)前實(shí)例的 Type。 GetXml() ? ? 返回存儲(chǔ)在 DataSet 中的數(shù)據(jù)的 XML 表示形式。 GetXmlSchema() ? 返回存儲(chǔ)在 DataSet 中的數(shù)據(jù)的 XML 表示形式的 XML 架構(gòu)。 HasChanges() ? ? 獲取一個(gè)值,該值指示 DataSet 是否有更改,包括新增行、已刪除的行或已修改的行。 HasChanges(DataRowState) ? ? 獲取一個(gè)值,該值指示 DataSet 是否有 DataRowState 被篩選的更改,包括新增行、已刪除的行或已修改的行。 InferXmlSchema(Stream, String[]) ? ? 將指定 Stream 中的 XML 架構(gòu)應(yīng)用于 DataSet。 InferXmlSchema(String, String[]) ? ? 將指定文件中的 XML 架構(gòu)應(yīng)用于 DataSet。 InferXmlSchema(TextReader, String[]) ? ? 將指定 TextReader 中的 XML 架構(gòu)應(yīng)用于 DataSet。 InferXmlSchema(XmlReader, String[]) 將指定 XmlReader 中的 XML 架構(gòu)應(yīng)用于 DataSet。 InitializeDerivedDataSet() ? 從二進(jìn)制或 XML 流反序列化數(shù)據(jù)集的所有表數(shù)據(jù)。 IsBinarySerialized(SerializationInfo, StreamingContext) 檢查 DataSet 的序列化表示形式的格式。 Load(IDataReader, LoadOption, DataTable[]) ? 使用提供的 DataSet 以數(shù)據(jù)源的值填充 IDataReader,同時(shí)使用 DataTable 實(shí)例的數(shù)組提供架構(gòu)和命名空間信息。 Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[]) ? 使用提供的 DataSet 以數(shù)據(jù)源的值填充 IDataReader,同時(shí)使用 DataTable 實(shí)例的數(shù)組提供架構(gòu)和命名空間信息。 Load(IDataReader, LoadOption, String[]) 使用所提供的 DataSet,并使用字符串?dāng)?shù)組為 DataSet 中的表提供名稱(chēng),從而用來(lái)自數(shù)據(jù)源的值填充 IDataReader。 MemberwiseClone() ? 創(chuàng)建當(dāng)前 Object 的淺表副本。 Merge(DataRow[]) ? ? 將 DataRow 對(duì)象數(shù)組合并到當(dāng)前的 DataSet 中。 Merge(DataRow[], Boolean, MissingSchemaAction) ? 將 DataRow 對(duì)象數(shù)組合并到當(dāng)前的 DataSet 中,在此過(guò)程中,將根據(jù)給定的參數(shù)保留或放棄在 DataSet 中進(jìn)行的更改并處理不兼容的架構(gòu)。 Merge(DataSet) ? 將指定的 DataSet 及其架構(gòu)合并到當(dāng)前 DataSet 中。 Merge(DataSet, Boolean) 將指定的 DataSet 及其架構(gòu)合并到當(dāng)前 DataSet 中,在此過(guò)程中,將根據(jù)給定的參數(shù)保留或放棄在此 DataSet 中進(jìn)行的任何更改。 Merge(DataSet, Boolean, MissingSchemaAction) ? ? 將指定的 DataSet 及其架構(gòu)與當(dāng)前的 DataSet 合并,在此過(guò)程中,將根據(jù)給定的參數(shù)保留或放棄在當(dāng)前 DataSet 中的更改并處理不兼容的架構(gòu)。 Merge(DataTable) ? ? 將指定的 DataTable 及其架構(gòu)合并到當(dāng)前 DataSet 中。 Merge(DataTable, Boolean, MissingSchemaAction) ? 將指定的 DataTable 及其架構(gòu)合并到當(dāng)前的 DataSet 中,在此過(guò)程中,將根據(jù)給定的參數(shù)保留或放棄在 DataSet 中進(jìn)行的更改并處理不兼容的架構(gòu)。 OnPropertyChanging(PropertyChangedEventArgs) ? ? 引發(fā) OnPropertyChanging(PropertyChangedEventArgs) 事件。 OnRemoveRelation(DataRelation) ? 當(dāng)從 DataRelation 中移除 DataTable 對(duì)象時(shí)發(fā)生。 OnRemoveTable(DataTable) ? ? 當(dāng)從 DataTable 中移除 DataSet 時(shí)發(fā)生。 RaisePropertyChanging(String) ? 發(fā)送指定的 DataSet 屬性將要更改的通知。 ReadXml(Stream) 使用指定的 Stream 將 XML 架構(gòu)和數(shù)據(jù)讀入 DataSet。 ReadXml(Stream, XmlReadMode) ? ? 使用指定的 DataSet 和 Stream 將 XML 架構(gòu)和數(shù)據(jù)讀入 XmlReadMode。 ReadXml(String) 使用指定的文件將 XML 架構(gòu)和數(shù)據(jù)讀入 DataSet。 ReadXml(String, XmlReadMode) ? ? 使用指定的文件和 DataSet 將 XML 架構(gòu)和數(shù)據(jù)讀入 XmlReadMode。 ReadXml(TextReader) 使用指定的 TextReader 將 XML 架構(gòu)和數(shù)據(jù)讀入 DataSet。 ReadXml(TextReader, XmlReadMode) ? ? 使用指定的 DataSet 和 TextReader 將 XML 架構(gòu)和數(shù)據(jù)讀入 XmlReadMode。 ReadXml(XmlReader) ? 使用指定的 XmlReader 將 XML 架構(gòu)和數(shù)據(jù)讀入 DataSet。 ReadXml(XmlReader, XmlReadMode) 使用指定的 DataSet 和 XmlReader 將 XML 架構(gòu)和數(shù)據(jù)讀入 XmlReadMode。 ReadXmlSchema(Stream) ? 從指定的 Stream 中將 XML 架構(gòu)讀入 DataSet。 ReadXmlSchema(String) ? 從指定的文件中將 XML 架構(gòu)讀入 DataSet。 ReadXmlSchema(TextReader) ? 從指定的 TextReader 中將 XML 架構(gòu)讀入 DataSet。 ReadXmlSchema(XmlReader) ? ? 從指定的 XmlReader 中將 XML 架構(gòu)讀入 DataSet。 ReadXmlSerializable(XmlReader) ? 忽略特性并返回一個(gè)空的數(shù)據(jù)集。 RejectChanges() 回滾自創(chuàng)建 DataSet 以來(lái)或上次調(diào)用 AcceptChanges() 以來(lái)對(duì)其進(jìn)行的所有更改。 Reset() 清除所有表并從 DataSet 中刪除所有關(guān)系、外部約束和表。 子類(lèi)應(yīng)重寫(xiě) Reset(),以便將 DataSet 還原到其原始狀態(tài)。 ShouldSerializeRelations() ? 獲取一個(gè)值,該值指示是否應(yīng)該保持 Relations 屬性。 ShouldSerializeTables() 獲取一個(gè)值,該值指示是否應(yīng)該保持 Tables 屬性。 ToString() ? 返回包含 Component 的名稱(chēng)的 String(如果有)。 不應(yīng)重寫(xiě)此方法。 (WriteXml(Stream) ? 使用指定的 DataSet 為 Stream 寫(xiě)當(dāng)前數(shù)據(jù)。 WriteXml(Stream, XmlWriteMode) ? 使用指定的 Stream 和 XmlWriteMode 寫(xiě)入 DataSet 的當(dāng)前數(shù)據(jù)和架構(gòu)(可選)。 若要寫(xiě)入架構(gòu),請(qǐng)將 mode 參數(shù)的值設(shè)置為 WriteSchema。 WriteXml(String) ? ? 將 DataSet 的當(dāng)前數(shù)據(jù)寫(xiě)入指定的文件。 WriteXml(String, XmlWriteMode) ? 使用指定的 XmlWriteMode 將 DataSet 的當(dāng)前數(shù)據(jù)和架構(gòu)(可選)寫(xiě)入指定的文件。 若要寫(xiě)入架構(gòu),請(qǐng)將 mode 參數(shù)的值設(shè)置為 WriteSchema。 WriteXml(TextWriter) ? ? 使用指定的 DataSet 為 TextWriter 寫(xiě)當(dāng)前數(shù)據(jù)。 WriteXml(TextWriter, XmlWriteMode) ? 使用指定的 TextWriter 和 XmlWriteMode 寫(xiě)入 DataSet 的當(dāng)前數(shù)據(jù)和架構(gòu)(可選)。 若要寫(xiě)入架構(gòu),請(qǐng)將 mode 參數(shù)的值設(shè)置為 WriteSchema。 WriteXml(XmlWriter) 將 DataSet 的當(dāng)前數(shù)據(jù)寫(xiě)入指定的 XmlWriter。 WriteXml(XmlWriter, XmlWriteMode) ? 使用指定的 XmlWriter 和 XmlWriteMode 寫(xiě)入 DataSet 的當(dāng)前數(shù)據(jù)和架構(gòu)(可選)。 若要寫(xiě)入架構(gòu),請(qǐng)將 mode 參數(shù)的值設(shè)置為 WriteSchema。 WriteXmlSchema(Stream) ? 將 DataSet 結(jié)構(gòu)作為 XML 架構(gòu)寫(xiě)入指定的 Stream 對(duì)象。 WriteXmlSchema(Stream, Converter<Type,String>) ? 將 DataSet 結(jié)構(gòu)作為 XML 架構(gòu)寫(xiě)入指定的 Stream 對(duì)象。 WriteXmlSchema(String) ? 將 XML 架構(gòu)形式的 DataSet 結(jié)構(gòu)寫(xiě)入文件。 WriteXmlSchema(String, Converter<Type,String>) ? 將 XML 架構(gòu)形式的 DataSet 結(jié)構(gòu)寫(xiě)入文件。 WriteXmlSchema(TextWriter) ? 將 DataSet 結(jié)構(gòu)作為 XML 架構(gòu)寫(xiě)入指定的 TextWriter 對(duì)象。 WriteXmlSchema(TextWriter, Converter<Type,String>) 將 DataSet 結(jié)構(gòu)作為一個(gè) XML 架構(gòu)寫(xiě)入指定的 TextWriter。 WriteXmlSchema(XmlWriter) ? 將 XML 架構(gòu)形式的 DataSet 結(jié)構(gòu)寫(xiě)入 XmlWriter 對(duì)象。 WriteXmlSchema(XmlWriter, Converter<Type,String>) 將 DataSet 結(jié)構(gòu)作為一個(gè) XML 架構(gòu)寫(xiě)入指定的 XmlWriter。
(方法較多建議收藏,方便以后查看)
界面設(shè)計(jì)
效果展示
我只是對(duì)數(shù)據(jù)的復(fù)制,清空做了簡(jiǎn)單的操作,我們只要記住 ,使用SQLiteDataAdapter下面的Fill()方法是對(duì)數(shù)據(jù)封裝,要使用具體的那個(gè)Table的數(shù)據(jù)就Table[0],一個(gè)DataSet可以有多張表,也就是多個(gè)Table,Table[0],Table[1].....再使用方法對(duì)數(shù)據(jù)進(jìn)行操作
代碼邏輯
只是做了一個(gè)簡(jiǎn)單的操作,我們可以根據(jù)方法,實(shí)現(xiàn)更多更高級(jí)的效果,這里只是簡(jiǎn)單操作一下,要深究可能兩篇文章都不一定講的清楚。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SQLite; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; ? namespace SQlite { ? public partial class Form1 : Form ? { ? ? ? string connectionString = "data source=" + @"C:\Users\ASUS\Desktop\IC00\IC00.db";//必須IC00.db 用絕對(duì)路徑,你的數(shù)據(jù)庫(kù)路徑 ? ? ? ? public Form1() ? ? ? { ? ? ? ? ? InitializeComponent(); ? ? ? } ? ? ? private void button1_Click(object sender, EventArgs e) ? ? ? { ? ? ? ? ? string sql = "select * from IC";//sql查詢(xún)語(yǔ)句 ? ? ? ? ? DataSet data = Select(sql);//調(diào)用查詢(xún)函數(shù) ? ? ? ? ? DataSet dataSet = new DataSet(); ? ? ? ? ? dataSet = data.Copy();//復(fù)制數(shù)據(jù) ? ? ? ? // dataSet = data.Clone();//復(fù)制結(jié)構(gòu),意思就是不復(fù)制數(shù)據(jù),復(fù)制表的結(jié)構(gòu),包括表頭 ? ? ? ? ? // dataSet.Clear();//數(shù)據(jù)清理,只清空數(shù)據(jù),不對(duì)結(jié)構(gòu)清空 ? ? ? ? ? dataSet.Reset(); ? ? ? ? ? dataGridView1.DataSource = data.Tables[0];//數(shù)據(jù)源為表格0也就是一個(gè)表 ? ? ? ? ? dataGridView2.DataSource = dataSet.Tables[0]; ? ? ? } ? ? ? public DataSet Select(string SQL) ? ? ? { ? ? ? ? ? using (SQLiteConnection conn = new SQLiteConnection(connectionString)) ? ? ? ? ? { ? ? ? ? ? ? ? DataSet ds = new DataSet(); ? ? ? ? ? ? ? try ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? conn.Open();//打開(kāi)數(shù)據(jù)庫(kù)連接 ? ? ? ? ? ? ? ? ? SQLiteDataAdapter com = new SQLiteDataAdapter(SQL, conn);//執(zhí)行SQL語(yǔ)句 ? ? ? ? ? ? ? ? ? com.Fill(ds, "ds");//將所以數(shù)據(jù)封裝為一個(gè)表 ? ? ? ? ? ? ? } ? ? ? ? ? ? ? catch (System.Data.SQLite.SQLiteException ex) ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? throw new Exception(ex.Message); ? ? ? ? ? ? ? } ? ? ? ? ? ? ? return ds; ? ? ? ? ? } ? ? ? } ? ? ? ? } }
到此這篇關(guān)于一文簡(jiǎn)單了解C# 中的DataSet類(lèi)的文章就介紹到這了,更多相關(guān) C# DataSet類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot中server.ssl.key-store配置路徑的問(wèn)題小結(jié)
這篇文章主要介紹了springboot中server.ssl.key-store配置路徑的問(wèn)題,文中還記錄了Spring Boot SSL(https)實(shí)例,介紹在web程序中使用自簽名的SSL(HTTPS)證書(shū)及創(chuàng)建SSL認(rèn)證,感興趣的朋友跟隨小編一起看看吧2024-02-02淺談springboot項(xiàng)目中定時(shí)任務(wù)如何優(yōu)雅退出
這篇文章主要介紹了淺談springboot項(xiàng)目中定時(shí)任務(wù)如何優(yōu)雅退出?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09Gradle build 報(bào)錯(cuò):Received status code 400 from server
這篇文章主要介紹了Gradle build 報(bào)錯(cuò):Received status code 400 from server,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07詳解如何在springcloud分布式系統(tǒng)中實(shí)現(xiàn)分布式鎖
最近在看分布式鎖的資料,本文就介紹一下利用springcloud結(jié)合redis實(shí)現(xiàn)分布式鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11SpringBoot詳細(xì)探究講解默認(rèn)組件掃描
在項(xiàng)目中我們創(chuàng)建了Controller,這個(gè)Controller是如何被spring自動(dòng)加載的呢?為什么Controller必須放在啟動(dòng)類(lèi)的同級(jí)目錄下呢2022-06-06IDEA的spring項(xiàng)目使用@Qualifier飄紅問(wèn)題及解決
這篇文章主要介紹了IDEA的spring項(xiàng)目使用@Qualifier飄紅問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11