将 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 加载到没有标题的数据表中的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Excel 或 CSV 文件加载到 Firebird 中?
VB.NET 通过代码将 Excel 文档加载到 SQL Server 数据库表中