2012-04-19 3 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

Если строка соединения содержит HDR = NO затем поставщика Jet OLE DB автоматически называет поля для вас (F1 для первого поля, F2 для второго поля и т. д.). Постараюсь изменить запрос таким образом

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

это работает только после того, как вы создали файл первенствовать и иметь что-то вставленный в первые две ячейки первой строки в Лист1

+0

Это не работает. Теперь он говорит, что инструкция INSERT INTO содержит следующее неизвестное имя поля: «F1». Убедитесь, что вы набрали имя правильно и повторите операцию. –

+0

выполните команду «select * from sheet1» и посмотрите имена полей, которые были возвращены, и постройте вставку с этими именами. – mslliviu

+1

Ну, мне удалось найти причину для НЕВОЗМОЖНОГО ПОЛЯ Ошибка NAME. Случается, когда файл excel пуст. Если вы вставляете что-то в первую ячейку и вторую ячейку, то распознаются имя поля F1 и F2. – Steve

1

Вы должны указать какие значения вы пишете, так вы не используете HDR - просто используйте ячейки. Ошибки «количество значений запроса» означает, что - нет заданных значений полей.

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

вкладки в заявлении содержит следующее неизвестное имя поля: 'A1'. Убедитесь, что вы правильно набрали имя и повторите операцию. –

+0

Я был неправ BTW, у @Steve было все правильно - вам нужно сосредоточиться на полях на числовой базе (F1, F2 и т. Д.). Но обновленный источник работает. – riffnl

+0

Странно. Я использую тот же самый код, который вы предоставили, и снова я получил это исключение. –

Смежные вопросы