C# 数据适配器之 DataAdapter 对象
01? DataAdapter 對象概述
DataAdapter 對象是一個數據適配器對象,是DataSet 與數據源之間的橋梁。DataAdapter 對像提供了 4 個屬性,用于實現與數據源之間的互通。
?? SelectCommand 屬性:向數據庫發送查詢 SQL 語句。?
?? DeleteCommand 屬性:向數據庫發送刪除 SQL語句。?
?? InsertCommand 屬性:向數據庫發送插入 SQL 語句。
?? UpdateCommand 屬性:向數據庫發送更新 SQL 語句。
在對數據庫進行操作時,只要將這 4 個屬性設置成相應的 SQL語向即可。DataAdapter 對象中還有幾個主要的方法,具體如下。
(1) Fill 方法用數據填充 DataSet。
語法如下:
public int Fil(DataSet dataSet,string sreTable)
?? dataSet:要用記錄和架構(如果必要)填充的 DataSet。
?? srcTable:用于表映射的源表的名稱。
?? 返回值:已在 DataSet 中成功添加或刷新的行數,這不包括受不返回行的語句影響的行。
? ?說明
當創建 DataAdapter 的實例時,將其讀/寫屬性設置為初始值、MissingMappingAction 屬性設置為 MissingMappingAction.Passthrough,MissingSchemaActicn 屬性設置為 MissingSchemaAction.Add。
(2)Update 方法更新數據庫時,DataAdapter 將調用 DeleteCommand、InsertCommand 以及 UpdateCommand 屬性。
語法如下:
public int Update(DataTable dataTable)
?? dataTable:用于更新數據源的 DataTable。
?? 返回值:DataSet 中成功更新的行數。
例如,如果使用 DataAdapter 對象的 Fill 方法從數據源中提取數據并填充到 DataSet 時,就會用到 SelectCommand 屬性中設置的命令對象。
02? 填充 DataSet 數據集
通過 DataAdapter 對象的 Fill 方法填充 DataSet 數據集,Fill 方法使用 Select 語句從數據源中檢索數據。與 Select 命令關聯的 Connection 對象必須有效,但不需要將其打開。
注意
DataSet 和 DataTable 對象從 MarshalByValueComponent(實現 IComponent 并提供可選程控制的組件的基實現)繼承而來,并支持用于遠程處理 ISerializable 接口。
例1
創建一個 Windows 應用程序,向窗體中添加一個 Button 控件和一個 DataGridView 控件,分別用于執行數據綁定以及顯示數據表中的數據。當單擊 Button 控件后,程序首先連接數據庫,然后創建一個 SqIDataAdapter 對象,使用該對象的 Fill 方法填充 DataSet 數據集,最后設置 DataGridView 控件的數據源,顯示查詢的數據。
“
代碼如下:
”
SqlConnection conn; private void button1_Click(object sender, EventArgs e) {//實例化 SqlConnection 變量 connconn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");//創建一個 SqlCommand 對象SqlCommand cmd=new SqICommand("select * from tb_command",conn);//創建一個 SqlDataAdapter 對象SqlDataAdapter sda = new SqlDataAdapter();//設置 SqlDataAdapter 對象的 SelectCommand 屬性為 cmd sda.SelectCommand = cmd;//創建一個 DataSet 對象DataSet ds = new DataSet();//使用 SqlDataAdapter 對象的 Fill 方法填充 DataSet 數據集 sda.Fill(ds,"cs");//設置 dataGridView1 控件的數據源dataGridView1.DataSource = ds.Tables[0]; }“
程序的運行結果如圖1 ?所示。
? ? ? ? ? 圖1 使用 Fill 方法填充 DataSet 數據集
03? 更新數據源
使用 DataAdapter 對象的 Update 方法,可以將 DataSet 中修改過的數據及時地更新到數據庫中,在調用 Update 方法之前,要實例化一個 CommandBuilder ?類,它能自動根據 DataAdapter 的 SelectCommand 的 SQL 語句判斷其他的 InsertCommand、UpdateCommand和 DeleteCommand。這樣,就不用設置 DataAdapter 的 InsertCommand、UpdateCommand 和 DeleteCommand 屬性,直接使用 DataAdapter 的 Update 方法來更新 DataSet、DataTable 或 DataRow 數組即可。
例2
創建一個 Windows 應用程序,查詢 tb_command 表中的所有數據并將其顯示在 DataGridView 控件中,單擊某條數據,會顯示其詳細信息。當對某條數據進行修改后,單擊“修改”按鈕,使用 DataAdapter 對象的 Update 方法更新數據源。
“
代碼如下:
”
SqlConnection conn; //聲明一個 SqlConnection 變量 DataSet ds; //聲明一個 DataSet 變量 SqlDataAdapter?sda;? //聲明一個?SqlDataAdapter?變量 private void Form1_Load(object sender, EventArgs e) {//實例化 SqlConnection 變量 conn,連接數據庫conn = new SqlConnection("server=.;database=db_15;uid=sa; pwd=");//創建一個?SqlCommand?對象SqlCommand cmd = new SqlCommand("select * from tb_command",conn);//實例化 SqlDataAdapter 對象 sda = new SqlDataAdapter();//設置 SqlDataAdapter 對象的 SelectCommand 屬性為 cmd sda.SelectCommand?=?cmd;?//實例化 DataSet ds = new DataSet();//使用 SqlDataAdapter 對象的 Fill 方法填充 DataSet sda.Fill(ds,"cs");//設置 dataGridView1 控件的數據源dataGridView1.DataSource = ds.Tables[0]; } private void button1_Click(object sender, EventArgs e) {DataTable?dt?=?ds.Tables["cs"];??? ?//創建一個?DataTablesda.FillSchema(dt,?SchemaType.Mapped);????????//把表結構加載到?tb_command?表中DataRow?dr?=?dt.Rows.Find(txtNo.Text);????????//創建一個?DataRow//設置 DetaRow 中的值dr["姓名"] = txtName.Text.Trim();dr["性別"] = this.txtSex.Text.Trim();dr["年齡"] = this.txtAge.Text.Trim();dr["獎金"] = this.txtJJ.Text.Trim(); //實例化一個 SqLCommandBuilderSqlCommandBuilder?cmdbuilder?=?new?SqlCommandBuilder(sda);//調用其 Update 方法將 DataTable 更新到數據庫中sda.Update(dt); } private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) {//在?dataGridView1?控件的?CellClick?事件中實現單擊某條數據顯示詳細信息txtNo.Text= dataGridView1.SelectedCells[0].Value.ToString();txtName.Text = dateGridView1.SelectedCells[1].Value.ToString(); txtSex.Text?=?dataGridView1.SelectedCells[2].Value.ToString();txtAge.Text = dataGridView1.SelectedCells[3].Value.ToString(); txtJJ.Text = dataGridView1.SelectedCells[4].Value.ToString(); }“
程序的運行結果如圖2 所示 。
? ? ? ? ? ? ? ? ? ? ? ? ???圖2? 更新數據源
注意
在 DataTable 對象上可以多次使用 Fill 方法,如果主鍵存在,則傳入行會與已有的匹配行合并;如果主鍵不存在,則傳入行會追加到 DataTable 中。
往期推薦
??C# ?分部類? ? ? ? ? ? ? ??? ?
??C# ?類型轉換
??C# ?迭代器
??C# ?線程的基本操作(一)
??C# ?線程的基本操作(二)
??C# ?線程的基本操作(三)
Love life,love yourself
關注小編不迷路呦~
代碼如下:
總結
以上是生活随笔為你收集整理的C# 数据适配器之 DataAdapter 对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dapr 集成 APISIX 做API网
- 下一篇: C# 用IrisSkin4.dll美化