使用OracleBulkCopy批量將dataset數據集插入數據庫


最近項目經理讓調用webservice端口,將大會的數據重新插入中間庫(數據庫),搞了兩天沒解決,在女票提醒下嘗試使用OracleBulkCopy,主要自己數據庫時10g的,而10的沒有OracleBulkCopy,所以一開始沒有往這方面想,最后下載了一個11g的Oracle.DataAccess(64位),再從網上大神那兒看了相關資料,終於搞定了,很是興奮。。。閑話少說,上代碼:

string strDelSQL = "delete  from table";
            string connstring = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
            OracleConnection conn = new OracleConnection(connstring);
            conn.Open();//打開數據庫連接

            OracleCommand delcmd = new OracleCommand(strDelSQL, conn);
            delcmd.ExecuteNonQuery();//插入數據庫數據之前先清空,防止重復插入

            string[] strDataSource = { "AHxx", "AHxx2", "AHxx3", "AHxx4" };
            for (int i = 0; i < strDataSource.Length; i++)
            {
                InsertDataToOracle(local, conn, strDataSource[i]);//執行dataset插入數據庫函數
            }
            conn.Close();//關閉數據庫連接

private void InsertDataToOracle(localhost.DZJCWebService local, OracleConnection conn, string DataSource)
        {
            DataSet dsDZJC = local.retDZJC_xzsp(DataSource, "", "", "", "");//靜態調用webservice端口,返回的是一個dataset數據集
            string strSQL = "select * from table";
            OracleCommand cmd = new OracleCommand(strSQL, conn);
            OracleBulkCopy obCopy = new OracleBulkCopy(conn, OracleBulkCopyOptions.UseInternalTransaction);
            obCopy.DestinationTableName = "table";
            DataTable dt = dsDZJC.Tables[0];
            foreach (DataColumn column in dt.Columns)
            {
                obCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName);//源列名->目標列名
            }
            try
            {
                obCopy.WriteToServer(dt);//把table表寫入數據庫表中
                obCopy.Dispose();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (obCopy != null)
                {
                    obCopy.Close();
                }
            }
        }

ps:開始沒添加清空要插入表的操作,導致程序重復運行時,老是出問題,而且在plsql端也無法使用delete命令刪除數據,各種煩躁。好在問題解決了。先寫個筆記留着以后遇到再看一下。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM