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

posted @ 2015-07-26 17:31  iCnG  阅读(4001)  评论(0编辑  收藏  举报