将 Excel 加载到没有标题的数据表中

Posted

技术标签:

【中文标题】将 Excel 加载到没有标题的数据表中【英文标题】:Loading Excel into Datatable without header 【发布时间】:2015-10-23 16:30:17 【问题描述】:

我用 C# 编写了一个代码来将数据从 excel 复制到 sql 表。问题是它在将数据导入 sql 表时跳过了前两行。如果我插入 HDR=No 它只跳过第一行。我该如何解决这个问题,使其不会跳过任何行?

string excelfilepath = @"C:\Users\atola\Desktop\BS\ctest.xlsx";
       string ssqltable = "student";
// make sure your sheet name is correct, here sheet name is sheet1, so you can change your sheet name if have different
string myexceldataquery = "select  * from [sheet1$]";
try

    //create our connection strings
    string sexcelconnectionstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelfilepath + ";Extended Properties='Excel 12.0;HDR=No;IMEX=1;'";


    string ssqlconnectionstring = "Data Source=MCKSQLDW1;Initial Catalog=AS400_Integration;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False";
    //execute a query to erase any previous data from our destination table
    string sclearsql = "delete from " + ssqltable;
    SqlConnection sqlconn = new SqlConnection(ssqlconnectionstring);
    SqlCommand sqlcmd = new SqlCommand(sclearsql, sqlconn);
    sqlconn.Open();
    sqlcmd.ExecuteNonQuery();
    sqlconn.Close();
    //series of commands to bulk copy data from the excel file into our sql table
    OleDbConnection oledbconn = new OleDbConnection(sexcelconnectionstring);
    OleDbCommand oledbcmd = new OleDbCommand(myexceldataquery, oledbconn);
    oledbconn.Open();
    OleDbDataReader dr = oledbcmd.ExecuteReader();
    SqlBulkCopy bulkcopy = new SqlBulkCopy(ssqlconnectionstring);
    bulkcopy.DestinationTableName = ssqltable;
    while (dr.Read())
    
        bulkcopy.WriteToServer(dr);
    

    oledbconn.Close();

        catch (Exception ex)
        
           Console.WriteLine(ex.ToString());
        


    

【问题讨论】:

也许可以尝试在 Excel 中使用命名范围而不是工作表名称。 我不能使用范围,因为每次记录的数量都会不同 【参考方案1】:

我使用 do while 而不是 while,我的问题得到了解决。因为 datareader 仅在 Forward Direction 中工作,所以在调用 while 循环时,它已经移动 i++,当我们将它写入服务器时,它会写入第二行。

【讨论】:

以上是关于将 Excel 加载到没有标题的数据表中的主要内容,如果未能解决你的问题,请参考以下文章

将数据作为列表加载到 Netezza 非常慢

如何将 Excel 或 CSV 文件加载到 Firebird 中?

VB.NET 通过代码将 Excel 文档加载到 SQL Server 数据库表中

如何将 .iqy 文件作为数据源加载到 excel 中

如何遍历 Excel 文件并使用 SSIS 包将它们加载到数据库中?

如何从 Excel 或记事本(以 .txt 结尾的文档)将数据加载到 Win Bugs 中?