版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)適配器SqlDataAdapter類表示用于填充 DataSetSQL Server 數(shù)據(jù)庫的一組數(shù)據(jù)命令和一個數(shù)據(jù)庫連接。不能繼承此類。命名空間SqlDataAdapter 是 DataSet和 SQL Server 之間的橋接器,用于檢索和保存數(shù)據(jù)。SqlDataAdapter 通過對數(shù)據(jù)源使用適當(dāng)?shù)?Transact-SQL 語句映射 Fill(它可更改 DataSet 中的數(shù)據(jù)以匹配數(shù)據(jù)源中的數(shù)據(jù))和 Update(它可更改數(shù)據(jù)源中的數(shù)據(jù)以匹配 DataSet 中的數(shù)據(jù))來提供這一橋接。例:SqlConnection conn = new SqlConnection(connect
2、ion); SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand(query, conn);DataSet dataset; adapter.Fill(dataset);數(shù)據(jù)適配器 SqlDataAdapter類當(dāng) SqlDataAdapter 填充 DataSet 時,它將為返回的數(shù)據(jù)創(chuàng)建必要的表和列(如果它們尚不存在)。但是,除非 MissingSchemaAction屬性設(shè)置為 AddWithKey,否則這個隱式創(chuàng)建的架構(gòu)中就將不包括主鍵信息。也可以在使用 FillSch
3、ema 為數(shù)據(jù)集填充數(shù)據(jù)前,讓 SqlDataAdapter 創(chuàng)建 DataSet 的架構(gòu)(包括主鍵信息)。SqlDataAdapter 與 SqlConnection和 SqlCommand一起使用,以便在連接到 Microsoft SQL Server 數(shù)據(jù)庫時提高性能。SqlDataAdapter 還包括 SelectCommand、InsertCommand、DeleteCommand、UpdateCommand 和 TableMappings 屬性,使數(shù)據(jù)的加載和更新更加方便。當(dāng)創(chuàng)建 SqlDataAdapter 的實例時,讀/寫屬性將被設(shè)置為初始值。有關(guān)這些值的列表,參見 SqlD
4、ataAdapter 構(gòu)造函數(shù)。SqlDataAdapter構(gòu)造函數(shù)public SqlDataAdapter();例:SqlConnection nwindConn = new SqlConnection(Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind); SqlDataAdapter custDA = new SqlDataAdapter(); custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;SqlDataAdapter構(gòu)
5、造函數(shù)public SqlDataAdapter(SqlCommand):將指定的 SqlCommand 作為 SelectCommand屬性,初始化 SqlDataAdapter類的新實例例:SqlConnection nwindConn = new SqlConnection(Data Source=localhost; Integrated Security=SSPI;Initial Catalog=northwind); SqlCommand selectCMD = new SqlCommand(SELECT CustomerID, CompanyName FROM Customers
6、, nwindConn); SqlDataAdapter custDA = new SqlDataAdapter(selectCMD); custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;SqlDataAdapter構(gòu)造函數(shù)public SqlDataAdapter(string, SqlConnection):使用 SelectCommand和 SqlConnection對象初始化 SqlDataAdapter 類的新實例例:SqlConnection custConn = new SqlConnection(Data S
7、ource=localhost;Integrated Security=SSPI;Initial Catalog=northwind);SqlDataAdapter custDA = new SqlDataAdapter(SELECT CustomerID, CompanyName FROM Customers, custConn);custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;SqlDataAdapter構(gòu)造函數(shù)public SqlDataAdapter(string, string):用 SelectCommand和
8、一個連接字符串初始化 SqlDataAdapter類的新實例例:SqlDataAdapter custDA = new SqlDataAdapter(SELECT CustomerID, CompanyName FROM Customers, Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind);SqlConnection custConn = custDA.SelectCommand.Connection;custDA.MissingSchemaAction = MissingSchemaActio
9、n.AddWithKey;SqlDataAdapter屬性當(dāng)創(chuàng)建 SqlDataAdapter的實例時,下面的讀/寫屬性將設(shè)置為以下初始值PropertiesMissingMappingAction確定傳入數(shù)據(jù)沒有匹配的表或列時需要執(zhí)行的操作值:Passthrough創(chuàng)建源列或源表,并使用其原始名稱將其添加到 DataSet(初始值)Error如果缺少指定的列映射,則生成 InvalidOperationExceptionIgnore忽略沒有映射的列或表。返回空引用(Visual Basic 中為 Nothing)。MissingSchemaAction確定現(xiàn)有 DataSet架構(gòu)與傳入數(shù)據(jù)不
10、匹配時需要執(zhí)行的操作值:添加必需的列以完成架構(gòu)(初始值)AddWithKey添加必需的列和主鍵信息以完成架構(gòu)Error如果缺少指定的列映射,則生成 InvalidOperationExceptionIgnore忽略額外列可以通過單獨調(diào)用屬性來更改任何這些屬性的值SqlDataAdapter屬性AcceptChangesDuringFill(從 DataAdapter 繼承)獲取或設(shè)置一個值,該值指示在任何 Fill 操作過程中,在將 AcceptChanges添加到 DataTable之后是否針對 DataRow調(diào)用它,如果在 DataRow上調(diào)用 AcceptChanges,則為 true;
11、否則為 false。默認值為 trueContainer(從 Component 繼承)獲取 IContainer,它包含 Component。如果 Component 未在 IContainer 中封裝,則該值為空引用。IContainer提供容器的功能。容器是在邏輯上包含零個或更多個組件的對象。容器是封裝和跟蹤零個或更多個組件的對象。在此上下文中,包容是指邏輯包容,而不是直觀包容??梢栽诙喾N方案下使用組件和容器,包括可視化方案和非可視化方案。對實施者的說明:要成為容器,類必須實現(xiàn) IContainer 接口,該接口支持添加、移除和檢索組件的方法SqlDataAdapter屬性TableMa
12、ppings(從 DataAdapter 繼承)獲取一個集合,它提供源表和 DataTable之間的主映射,默認值是一個空集合。當(dāng)協(xié)調(diào)更改時,DataAdapter 使用 DataTableMappingCollection集合將數(shù)據(jù)源使用的列名與 DataSet使用的列名關(guān)聯(lián)起來public void ShowTableMappings() / . / create myDataAdapter / . myDataAdapter.TableMappings.Add(Categories,DataCategories); myDataAdapter.TableMappings.Add(Orde
13、rs,DataOrders); myDataAdapter.TableMappings.Add(Products,DataProducts); string myMessage = Table Mappings:n; for(int i=0;i myDataAdapter.TableMappings.Count;i+) myMessage += i.ToString() + + myDataAdapter.TableMappingsi.ToString() + n; MessageBox.Show(myMessage);DataTable 和 DataColumn 映射DataAdapter
14、在其 TableMappings 屬性中包含零個或更多個 DataTableMapping 對象的集合。DataTableMapping 提供對數(shù)據(jù)源的查詢所返回的數(shù)據(jù)與 DataTable 之間的主映射。DataTableMapping 名稱可以代替 DataTable 名稱傳遞到 DataAdapter 的 Fill 方法。以下示例為 MyAuthors 表創(chuàng)建名為 AuthorsMapping 的 DataTableMapping。workAdapter.TableMappings.Add(AuthorsMapping, MyAuthors); DataTableMapping 使得能夠
15、使用 DataTable 中與數(shù)據(jù)庫中的列名不同的列名。當(dāng)該表被更新時,DataAdapter 將使用此映射來匹配列。如果在調(diào)用 DataAdapter 的 Fill 或 Update 方法時未指定 TableName 或 DataTableMapping 名稱,DataAdapter 將查找名為“Table”的 DataTableMapping。如果 DataTableMapping 不存在,DataTable 的 TableName 將為“Table”??梢酝ㄟ^創(chuàng)建名為“Table”的 DataTableMapping 來指定默認的 DataTableMapping。DataTable 和
16、 DataColumn 映射以下代碼示例創(chuàng)建一個 DataTableMapping(從 System.Data.Common 命名空間)并通過將其命名為“Table”來使其成為指定 DataAdapter 的默認映射。然后,該示例將查詢結(jié)果中第一個表(Northwind 數(shù)據(jù)庫的 Customers 表)中的列映射到 DataSet 的 Northwind Customers 表中的一組更為用戶友好的名稱。對于未映射的列,將使用數(shù)據(jù)源中的列名稱。DataTableMapping custMap = custDA.TableMappings.Add(Table, NorthwindCustome
17、rs); custMap.ColumnMappings.Add( CompanyName, Company); custMap.ColumnMappings.Add( ContactName, Contact);custMap.ColumnMappings.Add( PostalCode, ZIPCode);custDA.Fill(custDS); 在更為復(fù)雜的情況下,可能會決定需要使用相同的 DataAdapter 來支持為不同的表加載不同的映射。若要完成此任務(wù),只需添加附加的 DataTableMapping 對象。DataTable 和 DataColumn 映射當(dāng) Fill 方法以 D
18、ataSet 實例和 DataTableMapping 名稱的形式進行傳遞時,如果存在具有該名稱的映射,則使用該映射;否則將使用具有該名稱的 DataTable。以下示例創(chuàng)建一個名稱為 Customers 而 DataTable 名稱為 BizTalkSchema 的 DataTableMapping。然后,該示例將 SELECT 語句所返回的行映射到 BizTalkSchema DataTable。ITableMapping bizMap = custDA.TableMappings.Add(Customers, BizTalkSchema);bizMap.ColumnMappings.Ad
19、d( CustomerID, ClientID);bizMap.ColumnMappings.Add( CompanyName, ClientName);bizMap.ColumnMappings.Add( ContactName, Contact);bizMap.ColumnMappings.Add( PostalCode, ZIP);custDA.Fill(custDS, Customers);注意:如果沒有為列映射提供源列名稱或者沒有為表映射提供源表名稱,則將自動生成默認名稱。如果沒有為列映射提供源列,則將給列映射提供遞增的默認名稱 SourceColumnN,這些名稱從“SourceC
20、olumn1”開始。如果沒有為表映射提供源表名稱,則將給該表映射提供遞增的默認名稱 SourceTableN,這些名稱從“SourceTable1”開始。 建議在為列映射提供源列名稱時避免使用“SourceColumnN”命名約定,在為表映射提供源表名稱時避免使用“SourceTableN”命名約定,因為所提供的名稱可能會與 ColumnMappingCollection 中現(xiàn)有的默認列映射名稱或 DataTableMappingCollection 中的表映射名稱發(fā)生沖突。如果提供的名稱已經(jīng)存在,將引發(fā)異常。DataTable 和 DataColumn 映射多個結(jié)果集:如果 SelectCo
21、mmand 返回多個表,F(xiàn)ill 將自動使用遞增值為 DataSet 中的表生成表名稱,這些表名稱從指定表名稱開始,并以 TableNameN 格式(從“TableName1”開始)繼續(xù)??梢允褂帽碛成鋵⒆詣由傻谋砻Q映射到要為 DataSet 中的表指定的名稱。例如,對于返回兩個表(Customers 和 Orders)的 SelectCommand,可對 Fill 發(fā)出以下調(diào)用。custDA.Fill(custDS, Customers)在 DataSet 中創(chuàng)建了兩個表:Customers 和 Customers1??梢允褂帽碛成鋪泶_保第二個表名為 Orders 而不是 Custome
22、rs1。若要完成此任務(wù),請將 Customers1 的源表映射到 DataSet 表 Orders,如以下示例所示。custDA.TableMappings.Add(Customers1, Orders)custDA.Fill(custDS, Customers)SqlDataAdapter屬性SelectCommand獲取或設(shè)置一個 Transact-SQL 語句或存儲過程,用于在數(shù)據(jù)源中選擇記錄。下面的實例將創(chuàng)建一個 SqlDataAdapter 并設(shè)置 SelectCommand 屬性。假定已經(jīng)創(chuàng)建一個 SqlConnection 對象public static SqlDataAdapt
23、er CreateCustomerAdapter(SqlConnection conn) SqlDataAdapter da = new SqlDataAdapter(); SqlCommand cmd; / Create the SelectCommand. cmd = new SqlCommand(SELECT * FROM Customers + WHERE Country = Country AND City = City, conn); cmd.Parameters.Add(Country, SqlDbType.NVarChar, 15); cmd.Parameters.Add(Ci
24、ty, SqlDbType.NVarChar, 15); da.SelectCommand = cmd;return da;SqlDataAdapter屬性DeleteCommand獲取或設(shè)置一個 Transact-SQL 語句或存儲過程,以從數(shù)據(jù)集刪除記錄。在 Update過程中,如果未設(shè)置此屬性而且 DataSet中存在主鍵信息,則在設(shè)置 SelectCommand 屬性并使用 SqlCommandBuilder的情況下,可以自動生成 DeleteCommand。面的實例創(chuàng)建一個 SqlDataAdapter并設(shè)置 DeleteCommand 屬性。假定已經(jīng)創(chuàng)建一個 SqlConnecti
25、on對象public static SqlDataAdapter CreateCustomerAdapter(SqlConnection conn) SqlDataAdapter da = new SqlDataAdapter(); SqlCommand cmd; SqlParameter parm;/ Create the DeleteCommand. cmd = new SqlCommand(DELETE FROM Customers WHERE CustomerID = CustomerID, conn); parm = cmd.Parameters.Add(CustomerID, Sq
26、lDbType.NChar, 5, CustomerID); parm.SourceVersion = DataRowVersion.Original; da.DeleteCommand = cmd; return da;SqlDataAdapter屬性InsertCommand獲取或設(shè)置一個 Transact-SQL 語句或存儲過程,以在數(shù)據(jù)源中插入新記錄。在 Update過程中,如果未設(shè)置此屬性而且 DataSet中包含主鍵信息,則在設(shè)置 SelectCommand屬性并使用 SqlCommandBuilder 的情況下,可以自動生成 InsertCommand。下面的實例將創(chuàng)建一個 Sq
27、lDataAdapter并設(shè)置 SelectCommand和 InsertCommand 屬性。假定已經(jīng)創(chuàng)建一個 SqlConnection對象public static SqlDataAdapter CreateCustomerAdapter(SqlConnection conn) SqlDataAdapter da = new SqlDataAdapter(); SqlCommand cmd;/ Create the InsertCommand. cmd = new SqlCommand(INSERT INTO Customers (CustomerID, CompanyName) + V
28、ALUES (CustomerID, CompanyName), conn); cmd.Parameters.Add(CustomerID, SqlDbType.NChar, 5, CustomerID); cmd.Parameters.Add(CompanyName, SqlDbType.NVarChar, 40, CompanyName); da.InsertCommand = cmd; return da;SqlDataAdapter屬性UpdateCommand獲取或設(shè)置一個 Transact-SQL 語句或存儲過程,用于更新數(shù)據(jù)源中的記錄。在 Update過程中,如果未設(shè)置此屬性而且
29、 DataSet 中包含主鍵信息,則在設(shè)置 SelectCommand 屬性并使用 SqlCommandBuilder的情況下,可以自動生成 UpdateCommand。然后,SqlCommandBuilder 將生成其他所有未設(shè)置的命令。此生成邏輯要求 DataSet 中存在鍵列信息。如果執(zhí)行此命令返回行,更新的行可能會合并到 DataSet 中,具體取決于如何設(shè)置 SqlCommand 對象的 UpdatedRowSource 屬性下面的實例將創(chuàng)建一個 SqlDataAdapter并設(shè)置 UpdateCommand 屬性。假定已經(jīng)創(chuàng)建一個SqlConnection 對象public sta
30、tic SqlDataAdapter CreateCustomerAdapter(SqlConnection conn) SqlDataAdapter da = new SqlDataAdapter(); SqlCommand cmd; SqlParameter parm;/ Create the UpdateCommand. cmd = new SqlCommand(UPDATE Customers SET CustomerID = CustomerID, CompanyName = CompanyName +WHERE CustomerID = oldCustomerID, conn);
31、cmd.Parameters.Add(CustomerID, SqlDbType.NChar, 5, CustomerID); cmd.Parameters.Add(CompanyName, SqlDbType.NVarChar, 40, CompanyName); parm = cmd.Parameters.Add(oldCustomerID, SqlDbType.NChar, 5, CustomerID); parm.SourceVersion = DataRowVersion.Original; da.UpdateCommand = cmd; return da;SqlDataAdapt
32、er屬性UpdatedRowSource 屬性Both將輸出參數(shù)和第一個返回行都映射到 DataSet 中的已更改的行FirstReturnedRecord將第一個返回行中的數(shù)據(jù)映射到 DataSet中的已更改的行None忽略任何返回的參數(shù)或行OutputParameters將輸出參數(shù)映射到 DataSet 中的已更改的行創(chuàng)建SqlDataAdapter實例public static void CreateSqlDataAdapter() SqlDataAdapter custDA = new SqlDataAdapter(SELECT CustomerID, CompanyName FROM
33、 Customers, Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind); SqlConnection custConn = custDA.SelectCommand.Connection; custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey; custDA.InsertCommand = new SqlCommand(INSERT INTO Customers (CustomerID, CompanyName) + VALUES
34、 (CustomerID, CompanyName), custConn); custDA.UpdateCommand = new SqlCommand(UPDATE Customers SET CustomerID = CustomerID, CompanyName = CompanyName +WHERE CustomerID = oldCustomerID, custConn); custDA.DeleteCommand = new SqlCommand(DELETE FROM Customers WHERE CustomerID = CustomerID, custConn); cus
35、tDA.InsertCommand.Parameters.Add(CustomerID, SqlDbType.Char, 5, CustomerID); custDA.InsertCommand.Parameters.Add(CompanyName, SqlDbType.VarChar, 40, CompanyName); custDA.UpdateCommand.Parameters.Add(CustomerID, SqlDbType.Char, 5, CustomerID); custDA.UpdateCommand.Parameters.Add(CompanyName, SqlDbTyp
36、e.VarChar, 40, CompanyName); custDA.UpdateCommand.Parameters.Add(oldCustomerID, SqlDbType.Char, 5, CustomerID).SourceVersion = DataRowVersion.Original; custDA.DeleteCommand.Parameters.Add(CustomerID, SqlDbType.Char, 5, CustomerID).SourceVersion = DataRowVersion.Original;SqlDataAdapter方法fillFill 方法在
37、DataSet中添加或刷新行以匹配數(shù)據(jù)源中的行Fill 方法使用 SELECT 語句從數(shù)據(jù)源中檢索數(shù)據(jù)。與 Select 命令關(guān)聯(lián)的 IDbConnection對象必須有效,但不需要將其打開。如果調(diào)用 Fill 之前 IDbConnection 已關(guān)閉,則將其打開以檢索數(shù)據(jù),然后再將其關(guān)閉。如果調(diào)用 Fill 之前連接已打開,它將保持打開狀態(tài)。如果在填充數(shù)據(jù)集時遇到錯誤,則錯誤發(fā)生之前添加的行將保留在數(shù)據(jù)集中。操作的剩余部分被中止。如果命令不返回任何行,則不向 DataSet中添加表,并且不引發(fā)異常。如果 DbDataAdapter對象在填充 DataTable時遇到重復(fù)列,它將以“colum
38、nname1”、“columnname2”、“columnname3”這種模式命名后面的列。如果傳入數(shù)據(jù)包含未命名的列,它們將按“Column1”、“Column2”的模式放在 DataSet 中。當(dāng)指定的查詢返回多項結(jié)果時,每個返回查詢的行的結(jié)果集都放置在單獨的表中。將整數(shù)值追加到指定的表名從而對其他結(jié)果集進行命名(例如“Table”、“Table1”、“Table2”等)。如果某個查詢不返回行,則不會為該查詢創(chuàng)建表。因此,如果先處理一個插入查詢,然后再處理一個選擇查詢,那么由于為選擇查詢創(chuàng)建的表是第一個表,所以該表將被命名為“Table”。在應(yīng)用程序中使用列名和表名時應(yīng)小心,一定不要與這些
39、命名模式發(fā)生沖突。SqlDataAdapter方法fill當(dāng)用于填充 DataSet 的 SELECT 語句(例如批處理 SQL 語句)返回多項結(jié)果時,如果其中一項結(jié)果包含錯誤,則將跳過所有后面的結(jié)果并且不將其添加到 DataSet 中。當(dāng)使用后面的 Fill 調(diào)用來刷新 DataSet 的內(nèi)容時,必須滿足以下兩個條件: 該 SQL 語句應(yīng)該與最初用來填充 DataSet的語句匹配。 必須存在鍵列信息。 如果主鍵信息存在,則協(xié)調(diào)任何重復(fù)的行,并且這些重復(fù)行將只在與 DataSet 對應(yīng)的 DataTable 中出現(xiàn)一次??梢酝ㄟ^ FillSchema(通過指定 DataTable 的 Prim
40、aryKey屬性),或者通過將 MissingSchemaAction 屬性設(shè)置為 AddWithKey 來設(shè)置主鍵信息。如果 SelectCommand 返回 OUTER JOIN 的結(jié)果,則 DataAdapter 不為生成的 DataTable 設(shè)置 PrimaryKey 值。必須顯式定義主鍵,確保正確地解析重復(fù)行。注意當(dāng)處理返回多項結(jié)果的批處理 SQL 語句時,用于 OLE DB 的 .NET Framework 數(shù)據(jù)提供程序的 FillSchema 的實現(xiàn)只為第一項結(jié)果檢索架構(gòu)信息。若要為多項結(jié)果檢索架構(gòu)信息,請使用 MissingSchemaAction 設(shè)置為 AddWithKe
41、y 的 Fill。在 DataSet中添加或刷新行以匹配使用 DataSet 和 DataTable名稱的數(shù)據(jù)源中的行public void GetMyRecords() / . / create myDataSet and myDataAdapter / . myDataAdapter.Fill(myDataSet, Categories);Fill 方法支持以下情況:DataSet 包含多個 DataTable 對象,而這些對象的名稱只有大小寫不同。在這種情況下,F(xiàn)ill 執(zhí)行區(qū)分大小寫的比較以查找相應(yīng)的表,如果不存在完全匹配的表,則新建一個。下面的 C# 代碼闡釋該行為。DataSet
42、dataset = new DataSet();dataset.Tables.Add(aaa);dataset.Tables.Add(AAA);adapter.Fill(dataset, aaa); / Fills aaa, which already exists in the DataSet.adapter.Fill(dataset, Aaa); / Adds a new table called Aaa.如果調(diào)用 Fill 并且 DataSet 只包含一個其名稱只有大小寫不同的 DataTable,則更新該 DataTable。在這種情況下,比較不區(qū)分大小寫。下面的 C# 代碼闡釋該行為
43、。DataSet dataset = new DataSet();dataset.Tables.Add(aaa);adapter.Fill(dataset, AAA); / Fills table aaa because only one similarly named table is in the DataSet.在 DataSet的指定范圍中添加或刷新行以匹配使用 DataSet 和 DataTable 名稱的數(shù)據(jù)源中的行public int Fill(DataSet, int, int, string); public int Fill( DataSet dataSet, int st
44、artRecord, int maxRecords, string srcTable ); 參數(shù)dataSet 要用記錄和架構(gòu)(如果必要)填充的 DataSet。 startRecord 從其開始的從零開始的記錄號。 maxRecords 要檢索的最大記錄數(shù)。 srcTable 用于表映射的源表的名稱。 下面的示例利用 categories 表中從第 10 行開始的 15 行數(shù)據(jù)來填充 DataSet。public void GetMyRecords() / . / create myDataSet and myDataAdapter / . myDataAdapter.Fill(myData
45、Set,9,15,Categories);SqlDataAdapter方法 Update 方法為指定的 DataRow對象數(shù)組中每個已插入、已更新或已刪除的行調(diào)用相應(yīng)的 INSERT、UPDATE 或 DELETE 語句當(dāng)應(yīng)用程序調(diào)用 Update 方法時,DbDataAdapter根據(jù) DataSet中配置的索引順序為每一行檢查 RowState 屬性,并迭代執(zhí)行所需的 INSERT、UPDATE 或 DELETE 語句。例如,由于 DataTable中行的排序,Update 可能先執(zhí)行一個 DELETE 語句,接著執(zhí)行一個 INSERT 語句,然后再執(zhí)行另一個 DELETE 語句。應(yīng)注意,
46、這些語句不是作為批處理進程執(zhí)行的;每一行都是單獨更新的。在必須控制語句類型順序的情況下(例如,INSERT 在 UPDATE 之前),應(yīng)用程序可以調(diào)用 GetChanges方法。有關(guān)更多信息,請參見使用 DataAdapter 和 DataSet 更新數(shù)據(jù)庫。如果未指定 INSERT、UPDATE 或 DELETE 語句,Update 方法會生成異常。但是,如果設(shè)置 .NET Framework 數(shù)據(jù)提供程序的 SelectCommand 屬性,則可以創(chuàng)建 SqlCommandBuilder或 OleDbCommandBuilder對象來為單個表更新自動生成 SQL 語句。然后,Command
47、Builder 將生成其他任何未設(shè)置的 SQL 語句。此生成邏輯要求 DataSet 中存在鍵列信息。有關(guān)更多信息,請參見自動生成的命令。Update 方法在執(zhí)行更新之前從第一個映射列出的表中檢索行。然后,Update 使用 UpdatedRowSource屬性的值刷新該行。忽略返回的任何其他行。在將任何數(shù)據(jù)加載回 DataSet 之后,將引發(fā) OnRowUpdated事件,從而允許用戶檢查經(jīng)協(xié)調(diào)的 DataSet 行以及該命令返回的任何輸出參數(shù)。在對一行成功進行更新之后,將接受對該行的更改SqlDataAdapter方法 Update 方法當(dāng)使用 Update 時,執(zhí)行的順序如下: 將 Da
48、taRow 中的值移至參數(shù)值。 引發(fā) OnRowUpdating事件。 執(zhí)行命令。 如果該命令設(shè)置為 FirstReturnedRecord,返回的第一項結(jié)果將放置在 DataRow中。 如果存在輸出參數(shù),它們將被放在 DataRow 中。 引發(fā) OnRowUpdated事件。 調(diào)用 AcceptChanges。 與 DbDataAdapter 關(guān)聯(lián)的每個命令通常都有一個與其關(guān)聯(lián)的參數(shù)集合。參數(shù)通過 .NET Framework 數(shù)據(jù)提供程序的 Parameter 類的 SourceColumn 和 SourceVersion 屬性映射到當(dāng)前行。SourceColumn 引用 DataTabl
49、e 列,而 DbDataAdapter 引用該列來獲取當(dāng)前行的參數(shù)值SqlDataAdapter方法 Update 方法SourceColumn 屬性還用于將輸出或輸入/輸出參數(shù)的值映射回 DataSet。如果它引用一個不存在的列,則會生成異常。.NET Framework 數(shù)據(jù)提供程序的 Parameter 類的 SourceVersion 屬性確定使用列值的哪個版本:Original、Current 還是 Proposed。該功能通常用于在 UPDATE 語句的 WHERE 子句中包含初始值,以檢查開放式并發(fā)沖突。注意如果在更新行時出錯,則會引發(fā)異常并停止執(zhí)行更新。若要在遇到錯誤時繼續(xù)更新
50、操作而不生成異常,請在調(diào)用 Update 之前將 ContinueUpdateOnError 屬性設(shè)置為 true。您還可以在 SqlDataAdapter 或 OleDbDataAdapter的 RowUpdated 事件中逐行對錯誤作出響應(yīng)。若要在 RowUpdated 事件中繼續(xù)更新操作而不生成異常,請將 RowUpdatedEventArgs的 Status屬性設(shè)置為 Continue。Update 方法程序?qū)嵗秊橹付ǖ?DataRow對象數(shù)組中每個已插入、已更新或已刪除的行調(diào)用相應(yīng)的 INSERT、UPDATE 或 DELETE 語句public DataSet CreateCmds
51、AndUpdate(DataSet myDataSet,string myConnection,string mySelectQuery,string myTableName) OleDbConnection myConn = new OleDbConnection(myConnection); OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(); myDataAdapter.SelectCommand = new OleDbCommand(mySelectQuery, myConn); OleDbCommandBuilder cus
52、tCB = new OleDbCommandBuilder(myDataAdapter); myConn.Open(); DataSet custDS = new DataSet(); myDataAdapter.Fill(custDS); /code to modify data in dataset here /Insert new records from DataSet DataRow myDataRowArray = custDS.Tables0.Select(null, null, DataViewRowState.Added); myDataAdapter.Update(myDa
53、taRowArray); myConn.Close(); return custDS; Update 方法程序?qū)嵗秊橹付ǖ?DataRow對象數(shù)組中每個已插入、已更新或已刪除的行調(diào)用相應(yīng)的 INSERT、UPDATE 或 DELETE 語句public DataSet CreateCmdsAndUpdate(DataSet myDataSet,string myConnection,string mySelectQuery,string myTableName) OleDbConnection myConn = new OleDbConnection(myConnection); OleDbD
54、ataAdapter myDataAdapter = new OleDbDataAdapter(); myDataAdapter.SelectCommand = new OleDbCommand(mySelectQuery, myConn); OleDbCommandBuilder custCB = new OleDbCommandBuilder(myDataAdapter); myConn.Open(); DataSet custDS = new DataSet(); myDataAdapter.Fill(custDS); /code to modify data in dataset he
55、re /Insert new records from DataSet DataRow myDataRowArray = custDS.Tables0.Select(null, null, DataViewRowState.Added); myDataAdapter.Update(myDataRowArray); myConn.Close(); return custDS; public DataSet CreateCmdsAndUpdate(DataSet myDataSet,string myConnection,string mySelectQuery,string myTableNam
56、e) OleDbConnection myConn = new OleDbConnection(myConnection); OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(); myDataAdapter.SelectCommand = new OleDbCommand(mySelectQuery, myConn); OleDbCommandBuilder custCB = new OleDbCommandBuilder(myDataAdapter); myConn.Open(); DataSet custDS = new Data
57、Set(); myDataAdapter.Fill(custDS); /code to modify data in dataset here myDataAdapter.Update(custDS); myConn.Close(); return custDS; 為指定 DataSet中每個已插入、已更新或已刪除的行調(diào)用相應(yīng)的 INSERT、UPDATE 或 DELETE 語句為指定 DataTable中每個已插入、已更新或已刪除的行調(diào)用相應(yīng)的 INSERT、UPDATE 或 DELETE 語句public DataTable CreateCmdsAndUpdate(DataSet myDa
58、taSet,string myConnection,string mySelectQuery,string myTableName) OleDbConnection myConn = new OleDbConnection(myConnection); OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(); myDataAdapter.SelectCommand = new OleDbCommand(mySelectQuery, myConn); OleDbCommandBuilder custCB = new OleDbCommand
59、Builder(myDataAdapter); myConn.Open(); DataTable custDT = new DataTable(); myDataAdapter.Fill(custDT); /code to modify data in DataTable here myDataAdapter.Update(custDT); myConn.Close(); return custDT; 為具有指定 DataTable名稱的 DataSet中每個已插入、已更新或已刪除的行調(diào)用相應(yīng)的 INSERT、UPDATE 或 DELETE 語句public DataSet CreateCmd
60、sAndUpdate(DataSet myDataSet,string myConnection,string mySelectQuery,string myTableName) OleDbConnection myConn = new OleDbConnection(myConnection); OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(); myDataAdapter.SelectCommand = new OleDbCommand(mySelectQuery, myConn); OleDbCommandBuilder cu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代服務(wù)業(yè)的全球化進程與未來趨勢預(yù)測報告
- 我們的節(jié)日端午節(jié)包粽子活動方案
- 生態(tài)城市規(guī)劃中的公園綠地建設(shè)
- 現(xiàn)代物流技術(shù)創(chuàng)新開啟智能化時代
- 客戶滿意度調(diào)查的解決方案
- 2023六年級數(shù)學(xué)上冊 四 圓的周長和面積 1圓的周長 圓的周長公式的拓展應(yīng)用說課稿 冀教版
- 14-2《變形記》(節(jié)選)(說課稿)-2024-2025學(xué)年高一語文下學(xué)期同步教學(xué)說課稿專輯(統(tǒng)編版必修下冊)
- 11 屹立在世界的東方 第1課時 說課稿-2023-2024學(xué)年道德與法治五年級下冊統(tǒng)編版001
- 2023二年級數(shù)學(xué)上冊 五 測量長度 1用厘米作單位量長度第3課時 用厘米、分米作單位量長度的練習(xí)說課稿 西師大版
- Unit 5 Whose dog is it(說課稿)-2023-2024學(xué)年人教PEP版英語五年級下冊
- 醫(yī)生定期考核簡易程序述職報告范文(10篇)
- 市政工程人員績效考核制度
- 公園景區(qū)安全生產(chǎn)
- 安全創(chuàng)新創(chuàng)效
- 《中國糖尿病防治指南(2024版)》更新要點解讀
- 初級創(chuàng)傷救治課件
- 《處理人際關(guān)系》課件
- TSGD7002-2023-壓力管道元件型式試驗規(guī)則
- 2022版義務(wù)教育英語課程標(biāo)準(zhǔn)整體解讀課件
- 2024年實驗小學(xué)大隊委競選筆試試題題庫
- GB/T 44412-2024船舶與海上技術(shù)液化天然氣燃料船舶加注規(guī)范
評論
0/150
提交評論