我想使用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
但我应该这样:
&#34; PREIS / STK。 EURO&#34; &#34; STK&#34; &#34;&#34; &#34; PRODUKT&#34; &#34; Artikelmerkmale&#34; &#34; SONSTIGE&#34;
我的错误在哪里?
代码适用于插入值。
答案 0 :(得分:0)
正如LearningNew所说,你只是在你的循环中提供 @ var +(index + 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));
答案 1 :(得分:0)
1)我创建了一个名为:F1,F2,...
列的表2)我使用动态名称更新了列名称(F1,F2,...也是动态创建的)
String _Header = "PREIS/Stk. EURO"
oleDbCommand.CommandText = "UPDATE[MySheet] SET F1 = @var";
oleDbCommand.Parameters.Add(new OleDbParameter("@var", _header));
这就是全部!