一文簡單了解C#?中的DataSet類
前言
今天我們一起學(xué)習(xí)一下DataSet類,DataSet類官方的表示是這樣的:"表示數(shù)據(jù)的內(nèi)存中緩存",大致意思就是我們把數(shù)據(jù)去取出來,然后把數(shù)據(jù)給DataSet,再對DataSet做數(shù)據(jù)處理,這樣似乎可以對數(shù)據(jù)做更快的處理,相當(dāng)于一個臨時的數(shù)據(jù)庫,數(shù)據(jù)是從數(shù)據(jù)庫檢索的記錄的緩存,數(shù)據(jù)集DataSet中不僅包含一個或多個表,還可以包括數(shù)據(jù)表之間的關(guān)系和約束。允許將不同類型的數(shù)據(jù)表復(fù)制到同一個數(shù)據(jù)集中,甚至還允許將數(shù)據(jù)表與XML文檔組合到一起協(xié)同操作。數(shù)據(jù)集從數(shù)據(jù)源中獲取數(shù)據(jù)以后就斷開了與數(shù)據(jù)源之間的連接。允許在數(shù)據(jù)集中定義數(shù)據(jù)約束和表關(guān)系,增添、刪除和編輯記錄,還可以對數(shù)據(jù)集中的數(shù)據(jù)進(jìn)行查詢、統(tǒng)計等。當(dāng)完成各項(xiàng)數(shù)據(jù)操作后,還可以將數(shù)據(jù)集中的最新數(shù)據(jù)更新到數(shù)據(jù)源。
DataSet屬性和方法
//屬性 CaseSensitive ? //獲取或設(shè)置一個值,該值指示 DataTable 對象中的字符串比較是否區(qū)分大小寫。 Container ? //獲取組件的容器。 (DataSetName ? ? //獲取或設(shè)置當(dāng)前 DataSet 的名稱。 DefaultViewManager ? //獲取 DataSet 所包含的數(shù)據(jù)的自定義視圖,以允許使用自定義的 DataViewManager 進(jìn)行篩選、搜索和導(dǎo)航。 DesignMode ? //獲取指示組件當(dāng)前是否處于設(shè)計模式的值。 (EnforceConstraints //獲取或設(shè)置一個值,該值指示在嘗試執(zhí)行任何更新操作時是否遵循約束規(guī)則。 Events ? //獲取附加到該組件的事件處理程序的列表。 (ExtendedProperties //獲取與 DataSet 相關(guān)的自定義用戶信息的集合。 HasErrors ? //獲取一個值,指示在此 DataTable 中的任何 DataSet 對象中是否存在錯誤。 IsInitialized ? //獲取一個值,該值指示是否已初始化 DataSet。 Locale ? //獲取或設(shè)置用于比較表中字符串的區(qū)域設(shè)置信息。 Namespace ? //獲取或設(shè)置 DataSet 的命名空間。 Prefix ? //獲取或設(shè)置一個 XML 前綴,該前綴是 DataSet 的命名空間的別名。 Relations ? //獲取用于將表鏈接起來并允許從父表瀏覽到子表的關(guān)系的集合。 RemotingFormat ? //獲取或設(shè)置遠(yuǎn)程處理期間使用的序列化格式 DataSet 。 SchemaSerializationMode //獲取或設(shè)置 SchemaSerializationMode 的 DataSet。 Site ? ? //獲取或設(shè)置 ISite 的 DataSet。 Tables ? //獲取包含在 DataSet 中的表的集合。
//方法 AcceptChanges() //提交自加載此 DataSet 或上次調(diào)用 AcceptChanges() 以來對其進(jìn)行的所有更改。 BeginInit() //開始初始化在窗體上使用或由另一個組件使用的 DataSet。 初始化發(fā)生在運(yùn)行時。 Clear() //通過移除所有表中的所有行來清除任何數(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() ? 為每個 DataTableReader 返回帶有一個結(jié)果集的 DataTable,順序與 Tables 集合中表的顯示順序相同。 CreateDataReader(DataTable[]) ? 為每個 DataTableReader 返回帶有一個結(jié)果集的 DataTable。 DetermineSchemaSerializationMode(SerializationInfo, StreamingContext) ? 確定 SchemaSerializationMode 的 DataSet。 DetermineSchemaSerializationMode(XmlReader) 確定 SchemaSerializationMode 的 DataSet。 Dispose() ? 釋放由 MarshalByValueComponent 使用的所有資源。 (Dispose(Boolean) ? 釋放由 MarshalByValueComponent 占用的非托管資源,還可以另外再釋放托管資源。 (EndInit() ? 結(jié)束在窗體上使用或由另一個組件使用的 DataSet 的初始化。 初始化發(fā)生在運(yùn)行時。 Equals(Object) ? 確定指定對象是否等于當(dāng)前對象。 GetChanges() ? ? 獲取 DataSet 的副本,該副本包含自加載以來或自上次調(diào)用 AcceptChanges() 以來對該數(shù)據(jù)集進(jìn)行的所有更改。 GetChanges(DataRowState) ? ? 獲取由 DataRowState 篩選的 DataSet 的副本,該副本包含上次加載以來或調(diào)用 AcceptChanges() 以來進(jìn)行的所有更改。 GetDataSetSchema(XmlSchemaSet) ? 獲取數(shù)據(jù)集的 XmlSchemaSet 的副本。 GetHashCode() ? 作為默認(rèn)哈希函數(shù)。 GetObjectData(SerializationInfo, StreamingContext) ? 使用序列化 DataSet 時所需的數(shù)據(jù)填充序列化信息對象。 GetSchemaSerializable() 返回一個可序列化的 XmlSchema 實(shí)例。 GetSerializationData(SerializationInfo, StreamingContext) ? 從二進(jìn)制或 XML 流反序列化表數(shù)據(jù)。 GetService(Type) ? ? 獲取 IServiceProvider 的實(shí)施者。 (GetType() ? 獲取當(dāng)前實(shí)例的 Type。 GetXml() ? ? 返回存儲在 DataSet 中的數(shù)據(jù)的 XML 表示形式。 GetXmlSchema() ? 返回存儲在 DataSet 中的數(shù)據(jù)的 XML 表示形式的 XML 架構(gòu)。 HasChanges() ? ? 獲取一個值,該值指示 DataSet 是否有更改,包括新增行、已刪除的行或已修改的行。 HasChanges(DataRowState) ? ? 獲取一個值,該值指示 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,同時使用 DataTable 實(shí)例的數(shù)組提供架構(gòu)和命名空間信息。 Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[]) ? 使用提供的 DataSet 以數(shù)據(jù)源的值填充 IDataReader,同時使用 DataTable 實(shí)例的數(shù)組提供架構(gòu)和命名空間信息。 Load(IDataReader, LoadOption, String[]) 使用所提供的 DataSet,并使用字符串?dāng)?shù)組為 DataSet 中的表提供名稱,從而用來自數(shù)據(jù)源的值填充 IDataReader。 MemberwiseClone() ? 創(chuàng)建當(dāng)前 Object 的淺表副本。 Merge(DataRow[]) ? ? 將 DataRow 對象數(shù)組合并到當(dāng)前的 DataSet 中。 Merge(DataRow[], Boolean, MissingSchemaAction) ? 將 DataRow 對象數(shù)組合并到當(dāng)前的 DataSet 中,在此過程中,將根據(jù)給定的參數(shù)保留或放棄在 DataSet 中進(jìn)行的更改并處理不兼容的架構(gòu)。 Merge(DataSet) ? 將指定的 DataSet 及其架構(gòu)合并到當(dāng)前 DataSet 中。 Merge(DataSet, Boolean) 將指定的 DataSet 及其架構(gòu)合并到當(dāng)前 DataSet 中,在此過程中,將根據(jù)給定的參數(shù)保留或放棄在此 DataSet 中進(jìn)行的任何更改。 Merge(DataSet, Boolean, MissingSchemaAction) ? ? 將指定的 DataSet 及其架構(gòu)與當(dāng)前的 DataSet 合并,在此過程中,將根據(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 中,在此過程中,將根據(jù)給定的參數(shù)保留或放棄在 DataSet 中進(jìn)行的更改并處理不兼容的架構(gòu)。 OnPropertyChanging(PropertyChangedEventArgs) ? ? 引發(fā) OnPropertyChanging(PropertyChangedEventArgs) 事件。 OnRemoveRelation(DataRelation) ? 當(dāng)從 DataRelation 中移除 DataTable 對象時發(fā)生。 OnRemoveTable(DataTable) ? ? 當(dāng)從 DataTable 中移除 DataSet 時發(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) ? 忽略特性并返回一個空的數(shù)據(jù)集。 RejectChanges() 回滾自創(chuàng)建 DataSet 以來或上次調(diào)用 AcceptChanges() 以來對其進(jìn)行的所有更改。 Reset() 清除所有表并從 DataSet 中刪除所有關(guān)系、外部約束和表。 子類應(yīng)重寫 Reset(),以便將 DataSet 還原到其原始狀態(tài)。 ShouldSerializeRelations() ? 獲取一個值,該值指示是否應(yīng)該保持 Relations 屬性。 ShouldSerializeTables() 獲取一個值,該值指示是否應(yīng)該保持 Tables 屬性。 ToString() ? 返回包含 Component 的名稱的 String(如果有)。 不應(yīng)重寫此方法。 (WriteXml(Stream) ? 使用指定的 DataSet 為 Stream 寫當(dāng)前數(shù)據(jù)。 WriteXml(Stream, XmlWriteMode) ? 使用指定的 Stream 和 XmlWriteMode 寫入 DataSet 的當(dāng)前數(shù)據(jù)和架構(gòu)(可選)。 若要寫入架構(gòu),請將 mode 參數(shù)的值設(shè)置為 WriteSchema。 WriteXml(String) ? ? 將 DataSet 的當(dāng)前數(shù)據(jù)寫入指定的文件。 WriteXml(String, XmlWriteMode) ? 使用指定的 XmlWriteMode 將 DataSet 的當(dāng)前數(shù)據(jù)和架構(gòu)(可選)寫入指定的文件。 若要寫入架構(gòu),請將 mode 參數(shù)的值設(shè)置為 WriteSchema。 WriteXml(TextWriter) ? ? 使用指定的 DataSet 為 TextWriter 寫當(dāng)前數(shù)據(jù)。 WriteXml(TextWriter, XmlWriteMode) ? 使用指定的 TextWriter 和 XmlWriteMode 寫入 DataSet 的當(dāng)前數(shù)據(jù)和架構(gòu)(可選)。 若要寫入架構(gòu),請將 mode 參數(shù)的值設(shè)置為 WriteSchema。 WriteXml(XmlWriter) 將 DataSet 的當(dāng)前數(shù)據(jù)寫入指定的 XmlWriter。 WriteXml(XmlWriter, XmlWriteMode) ? 使用指定的 XmlWriter 和 XmlWriteMode 寫入 DataSet 的當(dāng)前數(shù)據(jù)和架構(gòu)(可選)。 若要寫入架構(gòu),請將 mode 參數(shù)的值設(shè)置為 WriteSchema。 WriteXmlSchema(Stream) ? 將 DataSet 結(jié)構(gòu)作為 XML 架構(gòu)寫入指定的 Stream 對象。 WriteXmlSchema(Stream, Converter<Type,String>) ? 將 DataSet 結(jié)構(gòu)作為 XML 架構(gòu)寫入指定的 Stream 對象。 WriteXmlSchema(String) ? 將 XML 架構(gòu)形式的 DataSet 結(jié)構(gòu)寫入文件。 WriteXmlSchema(String, Converter<Type,String>) ? 將 XML 架構(gòu)形式的 DataSet 結(jié)構(gòu)寫入文件。 WriteXmlSchema(TextWriter) ? 將 DataSet 結(jié)構(gòu)作為 XML 架構(gòu)寫入指定的 TextWriter 對象。 WriteXmlSchema(TextWriter, Converter<Type,String>) 將 DataSet 結(jié)構(gòu)作為一個 XML 架構(gòu)寫入指定的 TextWriter。 WriteXmlSchema(XmlWriter) ? 將 XML 架構(gòu)形式的 DataSet 結(jié)構(gòu)寫入 XmlWriter 對象。 WriteXmlSchema(XmlWriter, Converter<Type,String>) 將 DataSet 結(jié)構(gòu)作為一個 XML 架構(gòu)寫入指定的 XmlWriter。
(方法較多建議收藏,方便以后查看)
界面設(shè)計

效果展示
我只是對數(shù)據(jù)的復(fù)制,清空做了簡單的操作,我們只要記住 ,使用SQLiteDataAdapter下面的Fill()方法是對數(shù)據(jù)封裝,要使用具體的那個Table的數(shù)據(jù)就Table[0],一個DataSet可以有多張表,也就是多個Table,Table[0],Table[1].....再使用方法對數(shù)據(jù)進(jìn)行操作




代碼邏輯
只是做了一個簡單的操作,我們可以根據(jù)方法,實(shí)現(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();//復(fù)制數(shù)據(jù)
? ? ? ? // dataSet = data.Clone();//復(fù)制結(jié)構(gòu),意思就是不復(fù)制數(shù)據(jù),復(fù)制表的結(jié)構(gòu),包括表頭
? ? ? ? ? // dataSet.Clear();//數(shù)據(jù)清理,只清空數(shù)據(jù),不對結(jié)構(gòu)清空
? ? ? ? ? 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;
? ? ? ? ? }
? ? ? }
? ? ?
? }
}到此這篇關(guān)于一文簡單了解C# 中的DataSet類的文章就介紹到這了,更多相關(guān) C# DataSet類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot中server.ssl.key-store配置路徑的問題小結(jié)
這篇文章主要介紹了springboot中server.ssl.key-store配置路徑的問題,文中還記錄了Spring Boot SSL(https)實(shí)例,介紹在web程序中使用自簽名的SSL(HTTPS)證書及創(chuàng)建SSL認(rèn)證,感興趣的朋友跟隨小編一起看看吧2024-02-02
淺談springboot項(xiàng)目中定時任務(wù)如何優(yōu)雅退出
這篇文章主要介紹了淺談springboot項(xiàng)目中定時任務(wù)如何優(yōu)雅退出?具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Gradle build 報錯:Received status code 400 from server
這篇文章主要介紹了Gradle build 報錯:Received status code 400 from server,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
詳解如何在springcloud分布式系統(tǒng)中實(shí)現(xiàn)分布式鎖
最近在看分布式鎖的資料,本文就介紹一下利用springcloud結(jié)合redis實(shí)現(xiàn)分布式鎖,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
SpringBoot詳細(xì)探究講解默認(rèn)組件掃描
在項(xiàng)目中我們創(chuàng)建了Controller,這個Controller是如何被spring自動加載的呢?為什么Controller必須放在啟動類的同級目錄下呢2022-06-06
IDEA的spring項(xiàng)目使用@Qualifier飄紅問題及解決
這篇文章主要介紹了IDEA的spring項(xiàng)目使用@Qualifier飄紅問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11

