当前位置 : 主页 > 网络编程 > c#编程 >

C#数据适配器DataAdapter

来源:互联网 收集:自由互联 发布时间:2023-01-31
一、填充数据 DataSet ds = new DataSet();SqlCommand cmd = new SqlCommand("select * from Catogories;select * from Customers", conn);SqlDataAdapter da = new SqlDataAdapter(cmd);//da可以多次使用于不同的SelectCommand.CommandTextD

一、填充数据

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");//参数依次为,数据源中表,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#利用itext实现PDF页面处理与切分
下一篇:没有了
网友评论