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