2012-04-19 69 views
4

我使用OleDB,我想將我的對象導出到Excel表中。工作表中的每一行都是我的對象之一。問題是我不知道如何在表單中沒有列標題時插入數據。導出到excel文件無標題c#使用Oledb

這一個:

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'" 

回答

8

自動爲您指定字段(第一個字段爲F1,第二個字段爲F2,等等)。 我會試着改變你的查詢這樣

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

這個工程已經創建的Excel文件,並有東西插在第一行的前兩個單元格在Sheet1

+0

這不起作用現在它說INSERT INTO語句包含以下未知字段名稱:'F1'。確保您輸入了名稱正確,然後再次嘗試操作 – 2012-04-19 08:34:18

+0

運行一個類似於「select * from sheet1」的命令並查看返回的字段名稱,然後構建用這些名稱插入 – mslliviu 2012-04-19 09:05:23

+1

那麼,我已經設法找到無效字段的原因NAME error。當excel文件爲空時發生,如果你在第一個單元格和第二個單元格中插入了一些東西,那麼F1和F2字段的名字就被識別出來了 – Steve 2012-04-19 09:28:35

1

你需要指定值你寫的,因爲你不使用HDR - 只使用這些單元。 錯誤「查詢值的數量」簡化意味着 - 沒有字段分配給提供的值。

更新:@Steve是正確與場(F1,F2等),和下面的代碼就在這裏工作:如果連接字符串包含HDR = NO然後噴氣OLE DB提供程序

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(); 
+0

INSERT INTO語句後,才包含以下未知字段名稱:'A1'。確保您輸入了正確的名稱,然後再次嘗試操作。 – 2012-04-19 08:34:51

+0

我錯了BTW,@Steve沒有錯 - 你需要關注數字庫(F1,F2等)上的字段。但更新後的源碼確實有效。 – riffnl 2012-04-19 08:53:42

+0

奇怪。我使用的是你提供的完全相同的代碼,並且我得到了這個異常。 – 2012-04-19 09:04:39