将Excel文件数据导入到SqlServer数据库的三种方案
2017-10-12 00:00
399 查看
最近在一个项目中需要用到Excel文件导入数据库的功能,本人很懒,所以到网上搜了一堆方法,但是通过对比,觉得一下三种是比较好用或者不是很常见的方法,希望对大家有所帮助。
方案一: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server,这种方法的优点是非常的灵活,可以对Excel表中的各个单元格进行用户所需的操作。
方案二: 直接通过SQL语句执行SQL Server的功能函数将Excel文件转换到SQL Server数据库。
方案三: 通过到入Excel的VBA dll,通过VBA接口获取Excel数据到DataSet
方案一: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server,这种方法的优点是非常的灵活,可以对Excel表中的各个单元格进行用户所需的操作。
openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Excel files(*.xls)|*.xls"; if(openFileDialog.ShowDialog()==DialogResult.OK) { FileInfo fileInfo = new FileInfo(openFileDialog.FileName); string filePath = fileInfo.FullName; string connExcel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=Excel 8.0"; try { OleDbConnection oleDbConnection = new OleDbConnection(connExcel); oleDbConnection.Open(); //获取excel表 DataTable dataTable = oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //获取sheet名,其中[0][1]... : 按名称排列的表单元素 string tableName = dataTable.Rows[0][2].ToString().Trim(); tableName = "[" + tableName.Replace("'","") + "]"; //利用SQL语句从Excel文件里获取数据 //string query = "SELECT classDate,classPlace,classTeacher,classTitle,classID FROM " + tableName; string query = "SELECT 日期,开课城市,讲师,课程名称,持续时间 FROM " + tableName; dataSet = new DataSet(); //OleDbCommand oleCommand = new OleDbCommand(query, oleDbConnection); //OleDbDataAdapter oleAdapter = new OleDbDataAdapter(oleCommand); OleDbDataAdapter oleAdapter = new OleDbDataAdapter(query,connExcel); oleAdapter.Fill(dataSet,"gch_Class_Info"); //从excel文件获得数据后,插入记录到SQL Server的数据表 DataTable dataTable1 = new DataTable(); SqlDataAdapter sqlDA1 = new SqlDataAdapter(@"SELECT classID, classDate, classPlace, classTeacher, classTitle, durativeDate FROM gch_Class_Info",sqlConnection1); //SqlCommandBuilder sqlCB1 = new SqlCommandBuilder(sqlDA1); sqlDA1.Fill(dataTable1); foreach(DataRow dataRow in dataSet.Tables["gch_Class_Info"].Rows) { DataRow dataRow1 = dataTable1.NewRow(); dataRow1["classDate"] = dataRow["日期"]; dataRow1["classPlace"] = dataRow["开课城市"]; dataRow1["classTeacher"] = dataRow["讲师"]; dataRow1["classTitle"] = dataRow["课程名称"]; dataRow1["durativeDate"] = dataRow["持续时间"]; dataTable1.Rows.Add(dataRow1); } Console.WriteLine("新插入 " + dataTable1.Rows.Count.ToString() + " 条记录"); sqlDA1.Update(dataTable1); oleDbConnection.Close(); } catch(Exception ex) { Console.WriteLine(ex.ToString()); } }
方案二: 直接通过SQL语句执行SQL Server的功能函数将Excel文件转换到SQL Server数据库。
OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Excel files(*.xls)|*.xls"; SqlConnection sqlConnection1 = null; if(openFileDialog.ShowDialog()==DialogResult.OK) { string filePath = openFileDialog.FileName; sqlConnection1 = new SqlConnection(); sqlConnection1.ConnectionString = "server=(local);integrated security=SSPI;initial catalog=Library"; //import excel into SQL Server 2000 /*string importSQL = "SELECT * into live41 FROM OpenDataSource" + "('Microsoft.Jet.OLEDB.4.0','Data Source=" + "\"" + "E:\\022n.xls" + "\"" + "; User ID=;Password=; Extended properties=Excel 5.0')...[Sheet1$]";*/ //export SQL Server 2000 into excel string exportSQL = @"EXEC master..xp_cmdshell 'bcp Library.dbo.live41 out " + filePath + "-c -q -S" + "\"" + "\"" + " -U" + "\"" + "\"" + " -P" + "\"" + "\"" + "\'"; try { sqlConnection1.Open(); //SqlCommand sqlCommand1 = new SqlCommand(); //sqlCommand1.Connection = sqlConnection1; //sqlCommand1.CommandText = importSQL; //sqlCommand1.ExecuteNonQuery(); //MessageBox.Show("import finish!"); SqlCommand sqlCommand2 = new SqlCommand(); sqlCommand2.Connection = sqlConnection1; sqlCommand2.CommandText = exportSQL; sqlCommand2.ExecuteNonQuery(); MessageBox.Show("export finish!"); } catch(Exception ex) { MessageBox.Show(ex.ToString()); } } if(sqlConnection1!=null) { sqlConnection1.Close(); sqlConnection1 = null; }
方案三: 通过到入Excel的VBA dll,通过VBA接口获取Excel数据到DataSet
OpenFileDialog openFile = new OpenFileDialog(); openFile.Filter = "Excel files(*.xls)|*.xls"; ExcelIO excelio = new ExcelIO(); if(openFile.ShowDialog()==DialogResult.OK) { if(excelio!=null) excelio.Close(); excelio = new ExcelIO(openFile.FileName); object[,] range = excelio.GetRange(); excelio.Close(); DataSet ds = new DataSet("xlsRange"); int x = range.GetLength(0); int y = range.GetLength(1); DataTable dt = new DataTable("xlsTable"); DataRow dr; DataColumn dc; ds.Tables.Add(dt); for(int c=1; c<=y; c++) { dc = new DataColumn(); dt.Columns.Add(dc); } object[] temp = new object[y]; for(int i=1; i<=x; i++) { dr = dt.NewRow(); for(int j=1; j<=y; j++) { temp[j-1] = range[i,j]; } dr.ItemArray = temp; ds.Tables[0].Rows.Add(dr); } dataGrid1.SetDataBinding(ds,"xlsTable"); if(excelio!=null) excelio.Close(); }
相关文章推荐
- 将Excel文件数据导入到SqlServer数据库的三种方案
- 将Excel文件数据导入到SqlServer数据库的三种方案
- 将Excel文件数据库导入SQL Server的三种方案
- 将Excel文件数据库导入SQL Server的三种方案
- mysql与Oracle垃圾用户方案临时给的excel文件数据批量数据导入库操作步骤整理
- 将Excel文件数据库导入SQL Server的三种方案
- android 把数据导入到excel文件中的三种方法
- 将Excel文件数据库导入SQL Server的三种方案
- excel文件某列数据无法导入SQLServer数据库?!
- 从Excel文件中导入数据到SQL Server 2012
- PLSQL导入Excel文件预览不到数据行问题
- PHP导入Excel和导出数据为Excel文件
- R—读取数据(导入csv,txt,excel文件)
- 从Excel导入数据到vi文件中遇到问题解决
- 基于Spring MVC实现基于form表单上传Excel文件,批量导入数据
- 游标、获取本地本地多个文件、Excel数据导入、跨服务器数据拷贝、行转列示例
- 将Control List中的数据导入类Excel的表格中,(使用了.csv文件)
- 在VS2005中,将DataGridView中的数据导入Excel文件
- 读取Excel文件中的数据,并将其导入数据库
- 将excel文件中的数据导入到mysql