5

OleDB を使用しており、オブジェクトを Excel テーブルにエクスポートしたいと考えています。シートの各行は、私のオブジェクトの 1 つになります。問題は、シートに列ヘッダーがない場合にデータを挿入する方法がわからないことです。

これです:

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、2 番目のフィールドは F2 など)。この方法でクエリを変更しようとします

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

これは、Excel ファイルを作成し、Sheet1 の最初の行の最初の 2 つのセルに何かを挿入した後にのみ機能します。

于 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 に答える