最近項目經理讓調用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命令刪除數據,各種煩躁。好在問題解決了。先寫個筆記留着以后遇到再看一下。。。