【问题标题】:Insert Excel file data into database table using c# [closed]使用c#将Excel文件数据插入数据库表[关闭]
【发布时间】:2013-07-01 13:03:06
【问题描述】:

我正在开发 web 应用程序,它将使用 asp.net c# 中的 FileUpload 控件获取 excel 文件。现在,当单击提交按钮时,我想将 excel 数据插入到我的数据库表中。我在 SQL-Server 中有数据库。数据库表和 excel 文件的字段是相同的。我想将该 excel 的数据插入到我的数据库表中。那我该怎么做呢?

【问题讨论】:

  • 你尝试过什么吗?
  • 让您开始:msdn.microsoft.com/en-us/library/… 然后,一旦您提供更多信息(您尝试过的内容),我肯定会这样做。
  • 我指的是“aspdotnet-suresh.com/2010/09/…”此代码,但我收到此 lrge 错误“D:\Users\Other\Test.xlsx 文件扩展名:.xlsxException:Microsoft Access 数据库引擎无法找到对象“Sheet1”。确保该对象存在并且正确拼写其名称和路径名。如果“Sheet1$”不是本地对象,请检查您的网络连接或联系服务器管理员。”。所以请建议我该怎么做?
  • 嗨,我得到了解决方案,但仍然存在一个问题,问题是,我在 excel 文件中有一个包含时间值的锥形列,而我在我的数据库中有相同的字段time(7) 作为数据类型。所以现在当我导入数据时,它会给出这样的错误“来自数据源的 DateTime 类型的给定值无法转换为指定目标列的类型时间。”。那么在这种情况下我可以导入时间相关数据吗?

标签: c# asp.net database file


【解决方案1】:

其他人已经提到使用 Excel 互操作来读取 cmets 中的 Excel 文件,但是对于可能有多个用户的 Web 应用程序这样做是不安全的。

要开始使用,请查看Excel Data Reader 项目。我已经多次使用它来处理来自 Web 应用程序的 Excel 文件,并且效果很好。

【讨论】:

    【解决方案2】:

    您可以使用 OleDbConnection 中的 Excel 驱动程序使用 OLEDB 类直接从 Excel 文件中读取。获取数据表中的数据并将其保存到数据库中。

     string connectString =
                    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\\testit.xlsx;Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"";
                OleDbConnection conn = new OleDbConnection(connectString);
                OleDbDataAdapter da = new OleDbDataAdapter("Select * From [Sheet1$]", conn);
                DataTable dt = new DataTable();
                da.Fill(dt);
                // Save your datatable records to DB as you prefer.
    

    【讨论】:

      【解决方案3】:

      我一直在测试 NPOI 作为另一个第三方 Excel 解析库的替代品。

      https://code.google.com/p/npoi/

      到目前为止,它似乎运行良好,并且具有非常完整的功能集。当然,如果您只需要非常基本的 Excel 数据读取(而不是写入),那么这里提到的其他 DB 连接样式接口应该可以很好地工作。

      编辑:添加示例代码

      using( FileStream fs = new FileStream("file.xls", FileMode.Open, FileAccess.Read) )
      {
          HSSFWorkbook wb = new HSSFWorkbook(fs);
          double value = wb.GetSheet("Sheet1").GetRow(1).GetCell(1).NumericCellValue;
          // read other values as necessary.
      }
      

      【讨论】:

        【解决方案4】:

        试试下面的代码。也许它很粗糙,但它有效

        string connectString =
                    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\data\\exceltest.xlsx;Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"";
                OleDbConnection conn = new OleDbConnection(connectString);
                OleDbDataAdapter da = new OleDbDataAdapter("Select * From [Sheet1$]", conn);
                DataTable dt = new DataTable();
                da.Fill(dt);
                conn.Close();
                SqlConnection sqlc = new SqlConnection(@"server=.\SQLEXPRESS;user id=sa;pwd=windows;database=exceltest");
                sqlc.Open();
                SqlCommand cmd = new SqlCommand("select * from table1", sqlc);
                SqlDataAdapter sda = new SqlDataAdapter("select * from table1", sqlc);
                sda.InsertCommand = new SqlCommand("insert into table1", sqlc);
                DataTable dbset = new DataTable();
                da.Fill(dbset);
                SqlCommand cmdinsert = new SqlCommand();
                cmdinsert.Connection = sqlc;
                foreach (DataRow dsrc in dt.Rows)
                {
                    string insertcommand = "insert into table1" + dbset.TableName + " ";
                    string cols = "";
                    string vals = "";
                    DataRow dr = dbset.NewRow();
                    foreach (DataColumn clm in dt.Columns)
                    {
                        dr[clm.ColumnName] = dsrc[clm.ColumnName].ToString(); ;
                        if (cols.Length > 0)
                        {
                            cols += ",[" + clm.ColumnName+"]";
                        }
                        else
                        {
                            cols = "["+clm.ColumnName+"]";
                        }
                        if (vals.Length > 0)
                        {
                            vals += "," + "'" + dsrc[clm.ColumnName].ToString() + "'";
                        }
                        else
                        {
                            vals = "'" + dsrc[clm.ColumnName].ToString() + "'";
                        }
        
                    }
                    insertcommand += "(" + cols + ") values("+vals+")";
                    cmdinsert.CommandText = insertcommand;
                    cmdinsert.ExecuteNonQuery();
                    insertcommand = "";
        
                }
        
                sqlc.Close();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-04
          • 1970-01-01
          • 2019-02-11
          • 1970-01-01
          • 2014-10-06
          • 1970-01-01
          • 1970-01-01
          • 2017-12-03
          相关资源
          最近更新 更多