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