2

我正在尝试使用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。但我怎样才能让它发生呢?

4

2 回答 2

5

connectionstrings.com引用:

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

因此,您可以尝试将连接字符串更改为 set HDR=Yes

于 2013-02-10T09:56:20.593 回答
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'";
于 2013-02-10T10:01:45.953 回答