使用jet.oledb.4.0导入Excel工作表,将第一行设置为列名

我正在尝试使用Jet.Oledb将excel文件导入到数据表中 。 这是我的代码:

string sourceConstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + HttpContext.Current.Server.MapPath("~/" + fileName) + "';Extended Properties='Excel 8.0;HDR=No;IMEX=1'"; OleDbConnection con = new OleDbConnection(sourceConstr); OleDbCommand oleDbCmd = new OleDbCommand(); con.Open(); oleDbCmd.Connection = con; DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); string firstExcelSheetName=dt.Rows[0][2].ToString(); string query = "select * from [" + firstExcelSheetName + "]"; OleDbDataAdapter data = new OleDbDataAdapter(query, con); data.TableMappings.Add("Table", "dtExcel"); data.Fill(dtExcel); 

在excel文件中,第一行有列名。 但我的数据表变得(f1,f2,f3,…)作为列名和excel文件的第一行作为第一行。 所以我可以猜到我必须告诉第一行包含columnName。 但是,我怎么能做到这一点?

从connectionstrings.com报价:

“HDR =是;” 表示第一行包含列名,而不是数据。 “HDR =无;” 表明相反。

所以你可以尝试改变你的连接string来设置HDR=Yes

如下所示,在连接string,即您的情况下的sourceConstr只有一点变化。

 HDR=Yes 

代替

 HDR=No 

改变后它会

 string sourceConstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + HttpContext.Current.Server.MapPath("~/" + fileName) + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";