【问题标题】:Importing excel file to SQL database, how to ignore 2nd row; asp.net & C#将excel文件导入SQL数据库,如何忽略第二行; ASP.NET 和 C#
【发布时间】:2012-02-17 13:32:11
【问题描述】:

我正在从第一行是标题 (HDR=1) 的 excel 文件中导入 SQL Server 2008 数据库中的数据。问题是第二行也是我不需要导入的标题。那么如何忽略该excel中的第二行(我猜如果第一行是标题,那么excel中的实际第二行是第一行)?

在 MySQL 中只是在导入命令的末尾说 IGNORE LINES 1 ...我如何在 SQL Server 中做到这一点?

这是执行此操作的部分代码:

 //Create Connection to Excel work book
            OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);


            //Create OleDbCommand to fetch data from Excel
            OleDbCommand cmd = new OleDbCommand("Select [task_code],[status_code],[wbs] from [task$]", excelConnection);

            excelConnection.Open();
            OleDbDataReader dReader;
            dReader = cmd.ExecuteReader();
            SqlBulkCopy sqlBulk = new SqlBulkCopy(connectionString);
            //Give your Destination table name
            sqlBulk.DestinationTableName = "task";
            sqlBulk.WriteToServer(dReader);
            sqlBulk.Close();

谢谢

【问题讨论】:

  • 在写入之前从数据读取器中读取两行?

标签: c# asp.net sql-server excel import


【解决方案1】:

一个快速的解决方案是:

  1. 复制文件
  2. 使用 Office 互操作删除电子表格的第二行
  3. 导入修改后的电子表格

从电子表格中删除该行:

public static void DeleteRow(string pathToFile, string sheetName, string cellRef)
{
    Application app= new Application();
    Workbook  workbook = app.Workbooks.Open(pathToFile);

    for (int sheetNum = 1; sheetNum <  workbook.Sheets.Count + 1; sheetNum++)
    {
        Worksheet sheet = (Worksheet)workbook.Sheets[sheetNum];
        if (sheet.Name != sheetName)
        {
            continue;
        }

        Range secondRow = sheet.Range[cellRef];
        secondRow.EntireRow.Delete();

    }

    workbook.Save();
    workbook.Close();
    app.Quit();
}

【讨论】:

    【解决方案2】:

    使用以下内容:

    ...
    OleDbDataReader dReader;
    dReader = cmd.ExecuteReader();
    if( !dReader.Read() || !dReader.Read()) 
      return "No data";
    SqlBulkCopy sqlBulk = new SqlBulkCopy(connectionString);
    ...
    

    【讨论】:

    • 太棒了...我无法真正理解 if 语句的逻辑以及它为什么会跳过行...但是谢谢ssssss :)
    • 我刚刚发现我丢失了一些行......你能解释一下它应该检查什么吗?谢谢
    • 两次读取if用户跳过前两行,如果它们存在,如果不存在 - 它将返回
    • 好的,但是出了点问题……它在不应该的地方也忽略了第二行!我想如果我设置 HDR=No 会成功吗?我只需要跳过第一行(实际上是 excel 中的第二行),其中第一行是标题...
    • 只跳过一行重写if,如下所示:if( !dReader.Read())
    猜你喜欢
    • 2018-12-12
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多