最近项目经理让调用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命令删除数据,各种烦躁。好在问题解决了。先写个笔记留着以后遇到再看一下。。。