前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将Excel文件数据库导入SQL Server

将Excel文件数据库导入SQL Server

作者头像
Java架构师必看
发布2021-03-22 11:27:20
2.2K0
发布2021-03-22 11:27:20
举报
文章被收录于专栏:Java架构师必看

将Excel文件数据库导入SQL Server的三种方案//方案一: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server

代码语言:javascript
复制
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]...[N]: 按名称排列的表单元素
         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");
        //dataGrid1.DataSource = dataSet;
         //dataGrid1.DataMember = tableName;
         dataGrid1.SetDataBinding(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();
 }

本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档