如何高效的将excel导入到oracle?和前两天的SqlBulkCopy 导入到sqlserver对应,oracle也有自身的方法,只是稍微复杂些.
那就是使用oracle的sql*loader功能,而sqlldr只支持类似csv格式的数据,所以要自己把excel转换一下。
实现步骤:
用com组件读取excel-保存为csv格式-处理最后一个字段为null的情况和表头-根据excel结构建表-生成sqlldr的控制文件-用sqlldr命令导入数据
这个性能虽然没有sql的bcp快,但还是相当可观的,在我机器上1万多数据不到4秒,而且导入过程代码比较简单,也同样没有循环拼接sql插入那么难以维护。
这里也提个问题:处理csv文件的表头和最后一个字段为null的情况是否可以优化?除了我代码中的例子,我实在想不出其他办法。
using System; using System.Data; using System.Text; using System.Windows.Forms; using Microsoft.Office.Interop.Excel; using System.Data.OleDb; //引用-com-microsoft excel objects 11.0 namespace WindowsApplication5 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// /// excel导入到oracle /// /// 文件名 /// sheet名 /// oracle命令sqlplus连接串 public void TransferData(string excelFile, string sheetName, string sqlplusString) { string strTempDir = System.IO.Path.GetDirectoryName(excelFile); string strFileName = System.IO.Path.GetFileNameWithoutExtension(excelFile); string strCsvPath = strTempDir +"//"+strFileName + ".csv"; string strCtlPath = strTempDir + "//" + strFileName + ".Ctl"; string strSqlPath = strTe