C#數(shù)據(jù)適配器DataAdapter
一、填充數(shù)據(jù)
DataSet ds = new DataSet(); SqlCommand cmd = new SqlCommand("select * from Catogories;select * from Customers", conn); SqlDataAdapter da = new SqlDataAdapter(cmd);//da可以多次使用于不同的SelectCommand.CommandText DataTableMapping map = da.TableMappings.Add("Table", "Customer");//參數(shù)依次為,數(shù)據(jù)源中表,DataSet中的表 map.ColumnMappings.Add("Name", "CustomerName"); //da.MissingMappingAction= MissingMappingAction.Ignore; da.MissingSchemaAction = MissingSchemaAction.AddWithKey;//用于處理模式?jīng)_突,默認(rèn)為Add。 da.Fill(ds);//新增的DataTable表名默認(rèn)為"Table",而后新增的表名默認(rèn)為Table1,Table2等。 da.Fill(ds, "Customer"); da.Fill(ds, 0, 10000, "Customer");//用于分頁填充 da.FillSchema(ds, System.Data.SchemaType.Source, "Customer");//僅僅填充模式信息
如果連接未打開,則會(huì)自動(dòng)打開,F(xiàn)ill后自動(dòng)關(guān)閉,如還需要使用此連接,需要重新打開。如果conn手工已打開,F(xiàn)ill后需要手動(dòng)關(guān)閉連接。
二、將多個(gè)DataTable插入Tables集合
1、使用多個(gè)DataAdapter填充
SqlCommand cmd = new SqlCommand("select * from Catogories;s", conn); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds, "Catogories"); cmd.CommandText = "select * from Customers"; SqlDataAdapter da2 = new SqlDataAdapter(cmd); da2.Fill(ds, "Customer");
2、使用同一個(gè)DataAdapter,用不同的SelectCommandText填充
SqlCommand cmd = new SqlCommand("select * from Catogories;s", conn); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds, "Catogories") da.SelectCommand.CommandText = "select * from Customers"; da.Fill(ds, "Customer");
3、返回多個(gè)結(jié)果集的SQL(推薦)
SqlCommand cmd = new SqlCommand("select * from Catogories;select * from Customers", conn); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds);
三、使用DataAdapter更新數(shù)據(jù)
DataSet dsChanged = ds.GetChanges(); if (dsChanged != null) { SqlCommandBuilder builder=new SqlCommandBuilder(da); //自動(dòng)生成InsertCommand,UpdateCommand,DeleteCommand命令,前提是:Select語句為單表,同時(shí)此語句包含主鍵或唯一列 da.Update(ds,"Author");//Update方法檢測DataSet中的每條記錄,如果行狀態(tài)不為Unchanaged,根據(jù)其行狀態(tài)調(diào)用不同的SQL語句。 ds.AcceptChanges(); }
- DataTable.AcceptChanges方法:提交自上次調(diào)用AcceptChanges以來對(duì)該表進(jìn)行的所有更改。
所有Added和Modified行成為Unchanged;Deleted行被移除。 - DataTable.RejectChanges方法:回滾自該表加載以來或上次調(diào)用AcceptChanges以來對(duì)該表進(jìn)行的所有更改。
Added被移除。DataRowState為Modified或Deleted的行返回到其初始狀態(tài)。
四、使用SQL
OleDbDataAdapter da = new OleDbDataAdapter(); OleDbCommand cmd = new OleDbCommand("insert into [A_Emp_Dept_20190522](empname,line) values (?,?)", conn); cmd.Parameters.Add(new OleDbParameter("empname", OleDbType.Char, 11, ParameterDirection.Input, false, 0, 0, "empname", DataRowVersion.Current, null)); cmd.Parameters.Add(new OleDbParameter("line", OleDbType.Char, 11, ParameterDirection.Input, false, 0, 0, "line", DataRowVersion.Current, null)); da.InsertCommand = cmd; //da.InsertCommand.UpdatedRowSource= UpdateRowSource.Both; DataSet ds = new DataSet(); DataRow row = ds.Tables[0].NewRow(); row["empname"] = "222"; row["line"] = "FBd"; ds.Tables[0].Rows.Add(row); da.Update(ds);
UpdatedRowSource
- Both:輸出參數(shù)和返回的結(jié)果集的第一行都可以映射到 DataSet 中已更改的行。
FirstReturnedRecord:只有返回的結(jié)果集的第一行中的數(shù)據(jù)才可以映射到 DataSet 中已更改的行。
None:忽略任何輸出參數(shù)或返回的結(jié)果集中的行。
OutputParameters:只有輸出參數(shù)才可以映射到 DataSet 中已更改的行
五、DataAdapter事件
- RowUpdating:在對(duì)數(shù)據(jù)源執(zhí)行命令前的 Update(DataSet) 過程中發(fā)生。
- RowUpdated:在對(duì)數(shù)據(jù)源執(zhí)行命令后的 Update(DataSet) 過程中發(fā)生。
SqlRowUpdatedEventArgs 類屬性
- Command:獲取或設(shè)置當(dāng)調(diào)用 SqlCommand 時(shí)執(zhí)行的 Update(DataSet)。
- Errors:獲取當(dāng) Command 執(zhí)行時(shí) .NET Framework 數(shù)據(jù)提供程序生成的任何錯(cuò)誤。
- RecordsAffected:通過執(zhí)行 SQL 語句獲取更改、插入或刪除的行數(shù)。
- Row:獲取通過 Update(DataSet) 發(fā)送的 DataRow。
- RowCount:獲取在一批更新記錄中處理的行數(shù)。
- StatementType:獲取所執(zhí)行的 SQL 語句的類型。
- Status:獲取 Command 屬性的 UpdateStatus。
- TableMapping:獲取通過 Update(DataSet) 發(fā)送的 DataTableMapping。
到此這篇關(guān)于C#數(shù)據(jù)適配器DataAdapter的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#連接SQL?Sever數(shù)據(jù)庫與數(shù)據(jù)查詢實(shí)例之?dāng)?shù)據(jù)倉庫詳解
最近的工作遇到了連接查詢,特在此記錄,以免日后以往,下面這篇文章主要給大家介紹了關(guān)于C#連接SQL?Sever數(shù)據(jù)庫與數(shù)據(jù)查詢實(shí)例之?dāng)?shù)據(jù)倉庫的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06C# 使用CancellationTokenSource取消多線程
有時(shí)間我們?cè)谑褂枚嗑€程的時(shí)候,需要取消線程的執(zhí)行,可以使用CancellationTokenSource來取消對(duì)Task開辟多線程的取消,感興趣的可以了解一下2021-08-08C#畫筆使用復(fù)合數(shù)組繪制單個(gè)矩形的方法
這篇文章主要介紹了C#畫筆使用復(fù)合數(shù)組繪制單個(gè)矩形的方法,涉及C#使用畫筆繪制圖形的相關(guān)技巧,需要的朋友可以參考下2015-06-06C#中DataTable排序、檢索、合并等操作實(shí)例
這篇文章主要介紹了C#中DataTable排序、檢索、合并等操作實(shí)例,其中詳細(xì)介紹了DataTable.Select的一些注意問題和使用技巧等,需要的朋友可以參考下2014-04-04C#實(shí)現(xiàn)ComboBox控件顯示出多個(gè)數(shù)據(jù)源屬性的方法
這篇文章主要介紹了C#實(shí)現(xiàn)ComboBox控件顯示出多個(gè)數(shù)據(jù)源屬性的方法,實(shí)例分析了ComboBox控件的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09C#實(shí)現(xiàn)的圖片、string相互轉(zhuǎn)換類分享
這篇文章主要介紹了C#實(shí)現(xiàn)的圖片、string相互轉(zhuǎn)換類分享,本文直接給出類代碼,包含相互轉(zhuǎn)換的方法,需要的朋友可以參考下2015-03-03