5

我正在使用 OleDB,我想将我的对象导出到 excel 表中。工作表中的每一行都是我的对象之一。问题是当工作表中没有列标题时,我不知道如何插入数据。

这个:

commandString = "Insert into [Sheet1$] values('test1', 'test2')"

抛出此异常:

Number of query values and destination fields are not the same.

我的连接字符串是:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filename+";Extended Properties='Excel 8.0;HDR=No'"
4

2 回答 2

9

如果连接字符串包含 HDR=NO,则 Jet OLE DB 提供程序会自动为您命名字段(F1 表示第一个字段,F2 表示第二个字段,依此类推)。我将尝试以这种方式更改您的查询

commandString = "Insert into [Sheet1$] (F1, F2) values('test1', 'test2')" 

这仅在您创建了 excel 文件并在 Sheet1 的第一行的前两个单元格中插入了一些内容后才有效

于 2012-04-19T08:19:04.633 回答
2

您需要指定要写入值,因为您不使用 HDR - 只需使用单元格。错误“查询值的数量”仅意味着 - 没有为提供的值分配字段。

更新:@Steve 使用字段(F1、F2 等)是正确的,下面的代码在这里可以工作:

    OleDbConnection Cn = new OleDbConnection(String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=No\"", @"D:\test.xls"));
    Cn.Open();
    OleDbCommand Com = new OleDbCommand("INSERT INTO [Sheet1$](F1,F2) VALUES('test3','test4');", Cn);
    Com.ExecuteNonQuery();
    Cn.Close();
于 2012-04-19T08:12:41.673 回答