C#数据适配器DataAdapter
作者:springsnow
这篇文章介绍了C#中的数据适配器DataAdapter,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
一、填充数据
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的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。