批量操作数据是利用 CommandBuilder 和 DataAdapter.Update() 方法 对数据库进行批量更新
说解:
DataAdapter中有四个重要对象:SelectCommand,InsertCommand,UpdateCommand ,DeleteCommand 以SelectCommand 最为重要
只要设置好DataAdapter.SelectCommand(其中的CommandText) 其它三个可以由 CommandBuilder 自动生成。如下面看到的:
DataAdapter = new OracleDataAdapter(cmd);
OracleCommandBuilder ocb = new OracleCommandBuilder(dataAdapter);
dataAdapter.SelectCommand.CommandText = "SELECT * FROM BOBIMPORT WHERE ROWNUM=0";
dataAdapter.InsertCommand = ocb.GetInsertCommand();
dataAdapter.UpdateCommand = ocb.GetUpdateCommand();
dataAdapter.DeleteCommand = ocb.GetDeleteCommand();
//dataAdapter.SelectCommand 对象其实就是对 cmd的引用。
总结:要正确使用 DataAdapter 的 DataAdapter.Update() 方法 必须要设置 dataAdapter.SelectCommand.CommandText 属性
代码如下:
- using (OracleConnection con = new OracleConnection(CONNECTIONSTR))
- {
- using (OracleCommand cmd = con.CreateCommand())
- {
- using (OracleDataAdapter da = new OracleDataAdapter(cmd))
- {
- System.Data.DataTable dtDB = new System.Data.DataTable();
- //添加列,列的类型要求和数据库中要操作的表的列类型一致或兼容,以oracle为例
- dtDB.Columns.Add("user_id", typeof(string)); //varchar2
- dtDB.Columns.Add("name", typeof(string)); //varchar2
- dtDB.Columns.Add("sex", typeof(decimal)); //number
- dtDB.Columns.Add("moneh", typeof(double)); //number(10,2)
-
- OracleCommandBuilder ocb = new OracleCommandBuilder(da);
- //必须要有SelectCommand, da.SelectCommand对象是cmd的引用
- da.SelectCommand.CommandText = "SELECT * FROM BOBIMPORT WHERE ROWNUM=0";
- da.InsertCommand = ocb.GetInsertCommand();
-
- //da.Fill(dtDB); 如果上面指定了InsertCommand 就不用fill
-
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- dtDB.Rows.Add(dt.Rows[i].ItemArray);
-
- }
- int count=da.Update(dtDB);
-
- MessageBox.Show(count.ToString());
- }
- }