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的行返回到其初始状态。
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 中已更改的行
- RowUpdating:在对数据源执行命令前的 Update(DataSet) 过程中发生。
- RowUpdated:在对数据源执行命令后的 Update(DataSet) 过程中发生。
- Command:获取或设置当调用 SqlCommand 时执行的 Update(DataSet)。
- Errors:获取当 Command 执行时 .NET Framework 数据提供程序生成的任何错误。
- RecordsAffected:通过执行 SQL 语句获取更改、插入或删除的行数。
- Row:获取通过 Update(DataSet) 发送的 DataRow。
- RowCount:获取在一批更新记录中处理的行数。
- StatementType:获取所执行的 SQL 语句的类型。
- Status:获取 Command 属性的 UpdateStatus。
- TableMapping:获取通过 Update(DataSet) 发送的 DataTableMapping。
推荐阅读
- 大数据进击之路|万字长文带你从零开始认识机器学习
- 【有用的SQL】查Greenplum的数据字典
- SqlServer入门到精通|SQL实现将数据表中的字段中的值按分隔符分成多列
- 沃尔克外汇(|沃尔克外汇: 疲弱美元连遭重挫 非农数据或成救命稻草)
- MySQL时区问题
- 一网打尽!10款数据可视化软件介绍
- Spss用K均值聚类Kmeans、决策树、逻辑回归和T检验研究不同因素对通勤出行交通方式选择的影响调查数据分析
- 大数据技术栈|(七)Hadoop 3.3.0学习——HDFS
- 大数据|Hadoop系列(一)——HDFS总结
- 饿了么数据采集app爬虫