使用参数创建表

时间:2015-08-03 07:52:31

标签: c# sql excel oledb oledbcommand

我想使用OleDb

创建一个Excel表格
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;

我的错误在哪里?
代码适用于插入值。

2 个答案:

答案 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));

这就是全部!