C#数据适配器DataAdapter

一、填充数据

DataSet ds = new DataSet(); SqlCommand cmd = new SqlCommand("select * from Catogories; select * from Customers", conn); SqlDataAdapter da = new SqlDataAdapter(cmd); //da可以多次使用于不同的SelectCommand.CommandTextDataTableMapping map = da.TableMappings.Add("Table", "Customer"); //参数依次为,数据源中表,DataSet中的表map.ColumnMappings.Add("Name", "CustomerName"); //da.MissingMappingAction= MissingMappingAction.Ignore; da.MissingSchemaAction = MissingSchemaAction.AddWithKey; //用于处理模式冲突,默认为Add。da.Fill(ds); //新增的DataTable表名默认为"Table",而后新增的表名默认为Table1,Table2等。da.Fill(ds, "Customer"); da.Fill(ds, 0, 10000, "Customer"); //用于分页填充da.FillSchema(ds, System.Data.SchemaType.Source, "Customer"); //仅仅填充模式信息

如果连接未打开,则会自动打开,Fill后自动关闭,如还需要使用此连接,需要重新打开。如果conn手工已打开,Fill后需要手动关闭连接。
二、将多个DataTable插入Tables集合 1、使用多个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、使用同一个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、返回多个结果集的SQL(推荐)
SqlCommand cmd = new SqlCommand("select * from Catogories; select * from Customers", conn); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds);

三、使用DataAdapter更新数据
DataSet dsChanged = ds.GetChanges(); if (dsChanged != null){SqlCommandBuilder builder=new SqlCommandBuilder(da); //自动生成InsertCommand,UpdateCommand,DeleteCommand命令,前提是:Select语句为单表,同时此语句包含主键或唯一列da.Update(ds,"Author"); //Update方法检测DataSet中的每条记录,如果行状态不为Unchanaged,根据其行状态调用不同的SQL语句。ds.AcceptChanges(); }

  • DataTable.AcceptChanges方法:提交自上次调用AcceptChanges以来对该表进行的所有更改。
    所有Added和Modified行成为Unchanged;Deleted行被移除。
  • DataTable.RejectChanges方法:回滚自该表加载以来或上次调用AcceptChanges以来对该表进行的所有更改。
    Added被移除。DataRowState为Modified或Deleted的行返回到其初始状态。
四、使用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:输出参数和返回的结果集的第一行都可以映射到 DataSet 中已更改的行。
    FirstReturnedRecord:只有返回的结果集的第一行中的数据才可以映射到 DataSet 中已更改的行。
    None:忽略任何输出参数或返回的结果集中的行。
    OutputParameters:只有输出参数才可以映射到 DataSet 中已更改的行
五、DataAdapter事件
  • RowUpdating:在对数据源执行命令前的 Update(DataSet) 过程中发生。
  • RowUpdated:在对数据源执行命令后的 Update(DataSet) 过程中发生。
SqlRowUpdatedEventArgs 类属性
  • Command:获取或设置当调用 SqlCommand 时执行的 Update(DataSet)。
  • Errors:获取当 Command 执行时 .NET Framework 数据提供程序生成的任何错误。
  • RecordsAffected:通过执行 SQL 语句获取更改、插入或删除的行数。
  • Row:获取通过 Update(DataSet) 发送的 DataRow。
  • RowCount:获取在一批更新记录中处理的行数。
  • StatementType:获取所执行的 SQL 语句的类型。
  • Status:获取 Command 属性的 UpdateStatus。
  • TableMapping:获取通过 Update(DataSet) 发送的 DataTableMapping。
【C#数据适配器DataAdapter】到此这篇关于C#数据适配器DataAdapter的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读