2015-08-03 2 views
0

Я хотел бы создать таблицу Excel, используя OleDb:Создать таблицу с параметрами

OleDbCommand oleDbCommand = new OleDbCommand(); 
oleDbCommand.Connection = oleDbConnection; 

String commandText = "CREATE TABLE" + " [" + sheetModel.Sheet.Name + "] "; 
commandText += "("; 

for (int index = 0; index < spalten; index++) 
{ 
    String _header = sheetModel.DT1.Rows[heaader].ItemArray[index].ToString(); 

    oleDbCommand.Parameters.Add(new OleDbParameter("@var" + (index + 1).ToString(), _header)); 

    if (index > 0) 
    { 
     commandText += ", "; 
    } 

    commandText += "@var" + index.ToString() + " VARCHAR"; 
} 
commandText += ");"; 


try 
{ 
    oleDbCommand.CommandText = commandText; 
    oleDbCommand.ExecuteNonQuery(); 
    oleDbCommand.Parameters.Clear(); 
} 
catch (Exception exception) 
{ 
    MessageBox.Show(exception.Message); 
    return; 
} 

Результат для таблицы Excel является,

@ var0 @ var1 @ var2 @ var3 @ var4 @ var5

, но я должен выглядеть следующим образом:

"PREIS/Stk. EURO» "Stk." "" "Produkt" "Artikelmerkmale" "Sonstige"

Где моя ошибка?
Код работает отлично подходит для вставки значений.

+0

Я не знаю, какова ваша точная проблема прямо здесь ... Основная проблема заключается в том, что первая строка в вашей таблице не содержит правильных заголовков заголовков (* Preis *, * Stück *, * Produkt * и т. Д. .) но * @ var1-5 * вместо этого или что-то еще? – M463

+0

Где вы указываете заголовки заголовков в строке? вы просто предоставляете @ var + (index + 1) в цикле. – learningNew

+0

@ M463: Да, вы правы, это моя проблема! – MeerArtefakt

ответ

0

Как указано learningNew, вы просто предоставление @ вар + (индекс + 1) внутри цикла как заголовки столбцов.

чтобы исправить это, вы могли бы включать в себя switch состоянии обеспечить фактический заголовок столбца, основываясь на текущем цикле итерации.

Для этого измените строку

oleDbCommand.Parameters.Add(new OleDbParameter("@var" + (index + 1).ToString(), _header)); 

к чему-то вроде этого (непроверенные):

string colHeader = string.Empty; // variable for the column header 

switch (index) 
{ 
    case 0: 
     colHeader = "Preis/Stk. EURO"; 
    case 1: 
     colHeader = "Stk."; 
    case 2: 
     colHeader = "Produkt"; 
    default: 
     break; 
} 

// using the string variable here to set the actual column header 
oleDbCommand.Parameters.Add(new OleDbParameter(colHeader, _header)); 
+0

Другой вопрос: могу ли я создать таблицу без имени столбца? – MeerArtefakt

+0

Я не уверен в синтаксисе OleDb для создания таблицы в Excel, потому что я всегда использовал Interoperabilty Excel напрямую, так как это позволяет для дальнейшего взаимодействия, как доступ к разметке данных ячеек. Что произойдет, если вы предоставите 'string.Emtpy' для заголовка столбца? Я предполагаю, что код сработает, поскольку недостающие заголовки столбцов означают недостающие идентификаторы полей, а это значит, что ваш запрос не будет знать, в каком столбце для заполнения данных, но, пожалуйста, исправьте меня, если я ошибаюсь. – M463

0

1) Я создал таблицу с колонками Имя: F1, F2, ...

2) I Обновленный столбцы Name с динамическим Имя (F1, F2, ... также создал динамически)

String _Header = "PREIS/Stk. EURO" 
oleDbCommand.CommandText = "UPDATE[MySheet] SET F1 = @var"; 
oleDbCommand.Parameters.Add(new OleDbParameter("@var", _header)); 

Вот и все!

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