如何高效的将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的情况是否可以优化?除了我代码中的例子,我实在想不出其他办法。
- usingSystem;
-
usingSystem.Data;
-
usingSystem.Text;
-
usingSystem.Windows.Forms;
-
usingMicrosoft.Office.Interop.Excel;
-
usingSystem.Data.OleDb;
-
-
namespaceWindowsApplication5
- {
-
publicpartialclassForm1:Form
- {
-
publicForm1()
- {
- InitializeComponent();
- }
-
-
-
-
-
-
-
-
publicvoidTransferData(stringexcelFile,stringsheetName,stringsqlplusString)
- {
-
stringstrTempDir=System.IO.Path.GetDirectoryName(excelFile);
-
stringstrFileName=System.IO.Path.GetFileNameWithoutExtension(excelFile);
-
stringstrCsvPath=strTempDir+"//"+strFileName+".csv";
-
stringstrCtlPath=strTempDir+"//"+strFileName+".Ctl";
-
stringstrSqlPath=strTempDir+"//"+strFileName+".Sql";
-
if(System.IO.File.Exists(strCsvPath))
- System.IO.File.Delete(strCsvPath);
-
-
Microsoft.Office.Interop.Excel.ApplicationObjExcel=newMicrosoft.Office.Interop.Excel.Application();
- Microsoft.Office.Interop.Excel.WorkbookObjWorkBook;
-
Microsoft.Office.Interop.Excel.WorksheetObjWorkSheet=null;
- ObjWorkBook=ObjExcel.Workbooks.Open(excelFile,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);
-
foreach(Microsoft.Office.Interop.Excel.WorksheetsheetinObjWorkBook.Sheets)
- {
-
if(sheet.Name.ToLower()==sheetName.ToLower())
- {
- ObjWorkSheet=sheet;
-
break;
- }
- }
-
if(ObjWorkSheet==null)thrownewException(string.Format("{0}notfound!!",sheetName));
-
-
ObjWorkSheet.SaveAs(strCsvPath,Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV,Type.Missing,Type.Missing,false,false,false,Type.Missing,Type.Missing,false);
-
ObjWorkBook.Close(false,Type.Missing,Type.Missing);
- ObjExcel.Quit();
-
-
System.IO.StreamReaderreader=newSystem.IO.StreamReader(strCsvPath,Encoding.GetEncoding("gb2312"));
-
stringstrAll=reader.ReadToEnd();
- reader.Close();
-
stringstrData=strAll.Substring(strAll.IndexOf("/r/n")+2).Replace(",/r/n",",Null");
-
byte[]bytes=System.Text.Encoding.Default.GetBytes(strData);
- System.IO.Streamms=System.IO.File.Create(strCsvPath);
- ms.Write(bytes,0,bytes.Length);
- ms.Close();
-
-
stringstrConn="Provider=Microsoft.Jet.OLEDB.4.0;"+"DataSource="+excelFile+";"+"ExtendedProperties=Excel8.0;";
-
OleDbConnectionconn=newOleDbConnection(strConn);
- conn.Open();
- System.Data.DataTabletable=conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Columns,
-
newobject[]{null,null,sheetName+"$",null});
-
-
stringstrControl="loaddata/r/ninfile'{0}'/r/nappendintotable{1}/r/n"+
-
"FIELDSTERMINATEDBY','OPTIONALLYENCLOSEDBY'/"'/r/n(";
-
strControl=string.Format(strControl,strCsvPath,sheetName);
-
foreach(System.Data.DataRowdrowColumnsintable.Select("1=1","Ordinal_Position"))
- {
-
strControl+=drowColumns["Column_Name"].ToString()+",";
- }
-
strControl=strControl.Substring(0,strControl.Length-1)+")";
- bytes=System.Text.Encoding.Default.GetBytes(strControl);
- ms=System.IO.File.Create(strCtlPath);
- ms.Write(bytes,0,bytes.Length);
- ms.Close();
-
-
stringstrSql=@"droptable{0};
- createtable{0}
- (";
-
strSql=string.Format(strSql,sheetName);
-
foreach(System.Data.DataRowdrowColumnsintable.Select("1=1","Ordinal_Position"))
- {
-
strSql+=drowColumns["Column_Name"].ToString()+"varchar2(255),";
- }
-
strSql=strSql.Substring(0,strSql.Length-1)+");/r/nexit;";
- bytes=System.Text.Encoding.Default.GetBytes(strSql);
- ms=System.IO.File.Create(strSqlPath);
- ms.Write(bytes,0,bytes.Length);
- ms.Close();
-
-
System.Diagnostics.Processp=newSystem.Diagnostics.Process();
-
p.StartInfo=newSystem.Diagnostics.ProcessStartInfo();
-
p.StartInfo.FileName="sqlplus";
-
p.StartInfo.Arguments=string.Format("{0}@{1}",sqlplusString,strSqlPath);
- p.StartInfo.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden;
-
p.StartInfo.UseShellExecute=false;
-
p.StartInfo.CreateNoWindow=true;
- p.Start();
- p.WaitForExit();
-
-
p=newSystem.Diagnostics.Process();
-
p.StartInfo=newSystem.Diagnostics.ProcessStartInfo();
-
p.StartInfo.FileName="sqlldr";
-
p.StartInfo.Arguments=string.Format("{0}{1}",sqlplusString,strCtlPath);
- p.StartInfo.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden;
-
p.StartInfo.RedirectStandardOutput=true;
-
p.StartInfo.UseShellExecute=false;
-
p.StartInfo.CreateNoWindow=true;
- p.Start();
-
System.IO.StreamReaderr=p.StandardOutput;
-
stringline=r.ReadLine();
-
textBox3.Text+=line+"/r/n";
-
while(!r.EndOfStream)
- {
- line=r.ReadLine();
-
textBox3.Text+=line+"/r/n";
- textBox3.Update();
- }
- p.WaitForExit();
-
- }
-
privatevoidbutton1_Click(objectsender,EventArgse)
- {
-
TransferData(@"D:/test.xls","Sheet1","username/password@servicename");
- }
-
- }
- }
分享到:
相关推荐
本示例将详细介绍如何使用C#编程语言将Excel数据导入Oracle数据库。这里,我们假设你已经具备一定的C#编程基础,对Oracle数据库有基本了解,并且安装了Visual Studio 2008和Oracle 10g。 首先,我们需要在C#项目中...
在"Excel导入Oracle"的过程中,主要步骤如下: 1. **读取Excel数据**:使用C#中的EPPlus库打开Excel文件,遍历工作表,读取每一行的数据,将其存储在内存中的数据结构,如List<List<string>>中。 2. **建立Oracle...
在IT行业中,数据库管理和数据处理是至关重要的环节。本资源包提供了一个实用的解决方案,即使用C#编程语言批量导入Excel数据到...对于需要处理大量Excel数据并导入Oracle数据库的项目,这是一个非常实用的技术方案。
excel导入oracle工具
"Excel导入Oracle"是一种常见的需求,特别是在系统初始化、数据迁移或数据分析时。"Xls2Ora"是一个专门为此目的设计的小工具,它简化了从Excel表格向Oracle数据库导入数据的过程。 首先,让我们详细了解Excel。...
本文将详细介绍如何使用C#语言将Excel数据导入Oracle数据库。C#作为.NET框架的主要编程语言,提供了丰富的库来处理这类任务,例如Microsoft.Office.Interop.Excel库用于操作Excel,而Oracle.DataAccess.Client库则...
在IT行业中,C# WinForm是一种常见的桌面应用程序开发框架,而Excel数据的处理与数据库的交互是企业级应用中常见的需求。本知识点将详细介绍如何利用C# WinForm来实现从Excel文件导入数据到数据库。 首先,我们需要...
当需要处理Excel中的大量数据并将其快速导入到数据库时,C#提供了一些高效的方法来实现这一目标。本文将详细讲解如何利用C#实现Excel数据的高效导入。 首先,我们需要了解如何在C#中读取Excel文件。.NET Framework...
本文以某高职院校人才招聘管理系统中考生数据导入为例,研究在ASP.NET项目中,使用C#实现Excel数据导入到Oracle数据库。Excel数据导入分为以下四个步骤:(1)在本机上按照数据导入模板的要求,将需要导入的数据整理...
本主题聚焦于如何使用C#来读取Excel数据,并将其存储到Oracle 11g数据库中。这涉及到两个主要的技术领域:处理Excel文件和与Oracle数据库的交互。 首先,让我们详细了解一下如何在C#中读取Excel数据。通常,我们...
可以自动检测excel中的信息是否符合规定。不符合给出提示。 其他功能有单位管理,类型管理,批次管理,数据查询,导出Txt文件 注意: 开发环境为Visual Studio 2008,数据库为SQL Server 2008r2,数据库文件在 DB...
将C#与Oracle结合,可以实现高效的数据交互,包括数据的导入操作。下面将详细阐述如何使用C#进行数据导入到Oracle数据库。 首先,为了连接到Oracle数据库,我们需要安装Oracle的数据提供程序,如ODP.NET(Oracle ...
标题 "EXCEL导入ORACLE工具(含.net源码)" 提供了关于一个特定软件工具的信息,该工具设计用于将Excel电子表格中的数据导入到Oracle数据库。这个工具的关键知识点包括: 1. **Excel数据处理**:Excel是Microsoft ...
描述中提到"自己写的一个excel与oracle之间的数据导出导入的小工具,c#+oracel+excel",这表明该工具是由C#编程语言编写的,并且利用了Oracle数据库驱动和Excel相关的API来实现功能。C#是一种面向对象的、类型安全的...
在这个"Excel to Oracle 程序实例"中,我们将探讨如何使用C#编程语言在.NET平台上构建一个应用程序,该程序能够读取Excel文件中的数据并将其导入Oracle数据库。这个过程涉及到多个技术层面,包括文件I/O操作、数据...
在C#中实现Excel数据导入到数据库是一项常见的任务,尤其在数据分析、报表生成或系统集成等领域。这个过程通常包括读取Excel文件中的数据,处理这些数据,然后将它们存储到数据库中。以下是一些关键的知识点和步骤:...
标题中的“Excel to Oracle数据导入工具(含源码)”指的是一个软件工具,它的主要功能是帮助用户将Excel电子表格中的数据高效地导入到Oracle数据库中。这个工具的特别之处在于它提供了源代码,这意味着用户可以查看、...
ASP.NET 编程知识 - C# 将 Excel 数据导入到数据库的实现代码 本文主要讲解了使用 C# 将 Excel 数据导入到数据库的实现代码,涵盖了 ASP.NET 编程知识、C# 语言、数据库和软件/插件等相关知识点。 一、ASP.NET ...
标题中的"C#的sql server+Oracle导出程序"是指一个使用C#编程语言开发的应用程序,该程序能够从SQL Server和Oracle数据库中导出数据到Excel格式。这通常是为了数据分析、备份、报告生成或者在不同系统间转移数据的...