数据适配器-SqlDataAdapter类_第1页
数据适配器-SqlDataAdapter类_第2页
数据适配器-SqlDataAdapter类_第3页
数据适配器-SqlDataAdapter类_第4页
数据适配器-SqlDataAdapter类_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据适配器SqlDataAdapter类表示用于填充 DataSetSQL Server 数据库的一组数据命令和一个数据库连接。不能继承此类。命名空间SqlDataAdapter 是 DataSet和 SQL Server 之间的桥接器,用于检索和保存数据。SqlDataAdapter 通过对数据源使用适当的 Transact-SQL 语句映射 Fill(它可更改 DataSet 中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet 中的数据)来提供这一桥接。例:SqlConnection conn = new SqlConnection(connect

2、ion); SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand(query, conn);DataSet dataset; adapter.Fill(dataset);数据适配器 SqlDataAdapter类当 SqlDataAdapter 填充 DataSet 时,它将为返回的数据创建必要的表和列(如果它们尚不存在)。但是,除非 MissingSchemaAction属性设置为 AddWithKey,否则这个隐式创建的架构中就将不包括主键信息。也可以在使用 FillSch

3、ema 为数据集填充数据前,让 SqlDataAdapter 创建 DataSet 的架构(包括主键信息)。SqlDataAdapter 与 SqlConnection和 SqlCommand一起使用,以便在连接到 Microsoft SQL Server 数据库时提高性能。SqlDataAdapter 还包括 SelectCommand、InsertCommand、DeleteCommand、UpdateCommand 和 TableMappings 属性,使数据的加载和更新更加方便。当创建 SqlDataAdapter 的实例时,读/写属性将被设置为初始值。有关这些值的列表,参见 SqlD

4、ataAdapter 构造函数。SqlDataAdapter构造函数public SqlDataAdapter();例:SqlConnection nwindConn = new SqlConnection(Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind); SqlDataAdapter custDA = new SqlDataAdapter(); custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;SqlDataAdapter构

5、造函数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构造函数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构造函数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属性当创建 SqlDataAdapter的实例时,下面的读/写属性将设置为以下初始值PropertiesMissingMappingAction确定传入数据没有匹配的表或列时需要执行的操作值:Passthrough创建源列或源表,并使用其原始名称将其添加到 DataSet(初始值)Error如果缺少指定的列映射,则生成 InvalidOperationExceptionIgnore忽略没有映射的列或表。返回空引用(Visual Basic 中为 Nothing)。MissingSchemaAction确定现有 DataSet架构与传入数据不

10、匹配时需要执行的操作值:添加必需的列以完成架构(初始值)AddWithKey添加必需的列和主键信息以完成架构Error如果缺少指定的列映射,则生成 InvalidOperationExceptionIgnore忽略额外列可以通过单独调用属性来更改任何这些属性的值SqlDataAdapter属性AcceptChangesDuringFill(从 DataAdapter 继承)获取或设置一个值,该值指示在任何 Fill 操作过程中,在将 AcceptChanges添加到 DataTable之后是否针对 DataRow调用它,如果在 DataRow上调用 AcceptChanges,则为 true;

11、否则为 false。默认值为 trueContainer(从 Component 继承)获取 IContainer,它包含 Component。如果 Component 未在 IContainer 中封装,则该值为空引用。IContainer提供容器的功能。容器是在逻辑上包含零个或更多个组件的对象。容器是封装和跟踪零个或更多个组件的对象。在此上下文中,包容是指逻辑包容,而不是直观包容。可以在多种方案下使用组件和容器,包括可视化方案和非可视化方案。对实施者的说明:要成为容器,类必须实现 IContainer 接口,该接口支持添加、移除和检索组件的方法SqlDataAdapter属性TableMa

12、ppings(从 DataAdapter 继承)获取一个集合,它提供源表和 DataTable之间的主映射,默认值是一个空集合。当协调更改时,DataAdapter 使用 DataTableMappingCollection集合将数据源使用的列名与 DataSet使用的列名关联起来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 提供对数据源的查询所返回的数据与 DataTable 之间的主映射。DataTableMapping 名称可以代替 DataTable 名称传递到 DataAdapter 的 Fill 方法。以下示例为 MyAuthors 表创建名为 AuthorsMapping 的 DataTableMapping。workAdapter.TableMappings.Add(AuthorsMapping, MyAuthors); DataTableMapping 使得能够

15、使用 DataTable 中与数据库中的列名不同的列名。当该表被更新时,DataAdapter 将使用此映射来匹配列。如果在调用 DataAdapter 的 Fill 或 Update 方法时未指定 TableName 或 DataTableMapping 名称,DataAdapter 将查找名为“Table”的 DataTableMapping。如果 DataTableMapping 不存在,DataTable 的 TableName 将为“Table”。可以通过创建名为“Table”的 DataTableMapping 来指定默认的 DataTableMapping。DataTable 和

16、 DataColumn 映射以下代码示例创建一个 DataTableMapping(从 System.Data.Common 命名空间)并通过将其命名为“Table”来使其成为指定 DataAdapter 的默认映射。然后,该示例将查询结果中第一个表(Northwind 数据库的 Customers 表)中的列映射到 DataSet 的 Northwind Customers 表中的一组更为用户友好的名称。对于未映射的列,将使用数据源中的列名称。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); 在更为复杂的情况下,可能会决定需要使用相同的 DataAdapter 来支持为不同的表加载不同的映射。若要完成此任务,只需添加附加的 DataTableMapping 对象。DataTable 和 DataColumn 映射当 Fill 方法以 D

18、ataSet 实例和 DataTableMapping 名称的形式进行传递时,如果存在具有该名称的映射,则使用该映射;否则将使用具有该名称的 DataTable。以下示例创建一个名称为 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 中现有的默认列映射名称或 DataTableMappingCollection 中的表映射名称发生冲突。如果提供的名称已经存在,将引发异常。DataTable 和 DataColumn 映射多个结果集:如果 SelectCo

21、mmand 返回多个表,Fill 将自动使用递增值为 DataSet 中的表生成表名称,这些表名称从指定表名称开始,并以 TableNameN 格式(从“TableName1”开始)继续。可以使用表映射将自动生成的表名称映射到要为 DataSet 中的表指定的名称。例如,对于返回两个表(Customers 和 Orders)的 SelectCommand,可对 Fill 发出以下调用。custDA.Fill(custDS, Customers)在 DataSet 中创建了两个表:Customers 和 Customers1。可以使用表映射来确保第二个表名为 Orders 而不是 Custome

22、rs1。若要完成此任务,请将 Customers1 的源表映射到 DataSet 表 Orders,如以下示例所示。custDA.TableMappings.Add(Customers1, Orders)custDA.Fill(custDS, Customers)SqlDataAdapter属性SelectCommand获取或设置一个 Transact-SQL 语句或存储过程,用于在数据源中选择记录。下面的实例将创建一个 SqlDataAdapter 并设置 SelectCommand 属性。假定已经创建一个 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获取或设置一个 Transact-SQL 语句或存储过程,以从数据集删除记录。在 Update过程中,如果未设置此属性而且 DataSet中存在主键信息,则在设置 SelectCommand 属性并使用 SqlCommandBuilder的情况下,可以自动生成 DeleteCommand。面的实例创建一个 SqlDataAdapter并设置 DeleteCommand 属性。假定已经创建一个 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获取或设置一个 Transact-SQL 语句或存储过程,以在数据源中插入新记录。在 Update过程中,如果未设置此属性而且 DataSet中包含主键信息,则在设置 SelectCommand属性并使用 SqlCommandBuilder 的情况下,可以自动生成 InsertCommand。下面的实例将创建一个 Sq

27、lDataAdapter并设置 SelectCommand和 InsertCommand 属性。假定已经创建一个 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获取或设置一个 Transact-SQL 语句或存储过程,用于更新数据源中的记录。在 Update过程中,如果未设置此属性而且

29、 DataSet 中包含主键信息,则在设置 SelectCommand 属性并使用 SqlCommandBuilder的情况下,可以自动生成 UpdateCommand。然后,SqlCommandBuilder 将生成其他所有未设置的命令。此生成逻辑要求 DataSet 中存在键列信息。如果执行此命令返回行,更新的行可能会合并到 DataSet 中,具体取决于如何设置 SqlCommand 对象的 UpdatedRowSource 属性下面的实例将创建一个 SqlDataAdapter并设置 UpdateCommand 属性。假定已经创建一个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将输出参数和第一个返回行都映射到 DataSet 中的已更改的行FirstReturnedRecord将第一个返回行中的数据映射到 DataSet中的已更改的行None忽略任何返回的参数或行OutputParameters将输出参数映射到 DataSet 中的已更改的行创建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中添加或刷新行以匹配数据源中的行Fill 方法使用 SELECT 语句从数据源中检索数据。与 Select 命令关联的 IDbConnection对象必须有效,但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭,则将其打开以检索数据,然后再将其关闭。如果调用 Fill 之前连接已打开,它将保持打开状态。如果在填充数据集时遇到错误,则错误发生之前添加的行将保留在数据集中。操作的剩余部分被中止。如果命令不返回任何行,则不向 DataSet中添加表,并且不引发异常。如果 DbDataAdapter对象在填充 DataTable时遇到重复列,它将以“colum

38、nname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列,它们将按“Column1”、“Column2”的模式放在 DataSet 中。当指定的查询返回多项结果时,每个返回查询的行的结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名(例如“Table”、“Table1”、“Table2”等)。如果某个查询不返回行,则不会为该查询创建表。因此,如果先处理一个插入查询,然后再处理一个选择查询,那么由于为选择查询创建的表是第一个表,所以该表将被命名为“Table”。在应用程序中使用列名和表名时应小心,一定不要与这些

39、命名模式发生冲突。SqlDataAdapter方法fill当用于填充 DataSet 的 SELECT 语句(例如批处理 SQL 语句)返回多项结果时,如果其中一项结果包含错误,则将跳过所有后面的结果并且不将其添加到 DataSet 中。当使用后面的 Fill 调用来刷新 DataSet 的内容时,必须满足以下两个条件: 该 SQL 语句应该与最初用来填充 DataSet的语句匹配。 必须存在键列信息。 如果主键信息存在,则协调任何重复的行,并且这些重复行将只在与 DataSet 对应的 DataTable 中出现一次。可以通过 FillSchema(通过指定 DataTable 的 Prim

40、aryKey属性),或者通过将 MissingSchemaAction 属性设置为 AddWithKey 来设置主键信息。如果 SelectCommand 返回 OUTER JOIN 的结果,则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键,确保正确地解析重复行。注意当处理返回多项结果的批处理 SQL 语句时,用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息,请使用 MissingSchemaAction 设置为 AddWithKe

41、y 的 Fill。在 DataSet中添加或刷新行以匹配使用 DataSet 和 DataTable名称的数据源中的行public void GetMyRecords() / . / create myDataSet and myDataAdapter / . myDataAdapter.Fill(myDataSet, Categories);Fill 方法支持以下情况:DataSet 包含多个 DataTable 对象,而这些对象的名称只有大小写不同。在这种情况下,Fill 执行区分大小写的比较以查找相应的表,如果不存在完全匹配的表,则新建一个。下面的 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.如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable,则更新该 DataTable。在这种情况下,比较不区分大小写。下面的 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 名称的数据源中的行public int Fill(DataSet, int, int, string); public int Fill( DataSet dataSet, int st

44、artRecord, int maxRecords, string srcTable ); 参数dataSet 要用记录和架构(如果必要)填充的 DataSet。 startRecord 从其开始的从零开始的记录号。 maxRecords 要检索的最大记录数。 srcTable 用于表映射的源表的名称。 下面的示例利用 categories 表中从第 10 行开始的 15 行数据来填充 DataSet。public void GetMyRecords() / . / create myDataSet and myDataAdapter / . myDataAdapter.Fill(myData

45、Set,9,15,Categories);SqlDataAdapter方法 Update 方法为指定的 DataRow对象数组中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句当应用程序调用 Update 方法时,DbDataAdapter根据 DataSet中配置的索引顺序为每一行检查 RowState 属性,并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如,由于 DataTable中行的排序,Update 可能先执行一个 DELETE 语句,接着执行一个 INSERT 语句,然后再执行另一个 DELETE 语句。应注意,

46、这些语句不是作为批处理进程执行的;每一行都是单独更新的。在必须控制语句类型顺序的情况下(例如,INSERT 在 UPDATE 之前),应用程序可以调用 GetChanges方法。有关更多信息,请参见使用 DataAdapter 和 DataSet 更新数据库。如果未指定 INSERT、UPDATE 或 DELETE 语句,Update 方法会生成异常。但是,如果设置 .NET Framework 数据提供程序的 SelectCommand 属性,则可以创建 SqlCommandBuilder或 OleDbCommandBuilder对象来为单个表更新自动生成 SQL 语句。然后,Command

47、Builder 将生成其他任何未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息,请参见自动生成的命令。Update 方法在执行更新之前从第一个映射列出的表中检索行。然后,Update 使用 UpdatedRowSource属性的值刷新该行。忽略返回的任何其他行。在将任何数据加载回 DataSet 之后,将引发 OnRowUpdated事件,从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后,将接受对该行的更改SqlDataAdapter方法 Update 方法当使用 Update 时,执行的顺序如下: 将 Da

48、taRow 中的值移至参数值。 引发 OnRowUpdating事件。 执行命令。 如果该命令设置为 FirstReturnedRecord,返回的第一项结果将放置在 DataRow中。 如果存在输出参数,它们将被放在 DataRow 中。 引发 OnRowUpdated事件。 调用 AcceptChanges。 与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。参数通过 .NET Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性映射到当前行。SourceColumn 引用 DataTabl

49、e 列,而 DbDataAdapter 引用该列来获取当前行的参数值SqlDataAdapter方法 Update 方法SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列,则会生成异常。.NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定使用列值的哪个版本:Original、Current 还是 Proposed。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值,以检查开放式并发冲突。注意如果在更新行时出错,则会引发异常并停止执行更新。若要在遇到错误时继续更新

50、操作而不生成异常,请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您还可以在 SqlDataAdapter 或 OleDbDataAdapter的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常,请将 RowUpdatedEventArgs的 Status属性设置为 Continue。Update 方法程序实例为指定的 DataRow对象数组中每个已插入、已更新或已删除的行调用相应的 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 方法程序实例为指定的 DataRow对象数组中每个已插入、已更新或已删除的行调用相应的 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中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句为指定 DataTable中每个已插入、已更新或已删除的行调用相应的 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中每个已插入、已更新或已删除的行调用相应的 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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论