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

时间:2013-02-10 09:50:24

标签: c# excel oledb jet

我正在尝试使用 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。但我怎么能实现呢?

2 个答案:

答案 0 :(得分:4)

引用connectionstrings.com

  

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

因此,您可以尝试更改连接字符串以设置HDR=Yes

答案 1 :(得分:1)

如下所示,在连接字符串中只有一点变化,例如在您的情况下为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'";