C# 向数据库批量更新数据(插入、更新、删除)

批量操作数据是利用 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());
                    }
                }


 

你可能感兴趣的:(C#,JAVA等编程类)