3

下面是我的 Select * Function 的代码 - 它运行良好并且一切正常,直到我将 SQL 字符串从Select *From Company更改为

        query = "Select * From @1";

然后执行以下操作

        query = "Select * From @1";
        OleDbCommand Command = new OleDbCommand(query, sqlConnStr);

        DataTable Table = new DataTable();
        DataSet dataSet = new DataSet();
        Table = null;

        //Add Parameters
        Command.Parameters.AddWithValue("@1", SQLTables.Company);

        try
        {
            Command.ExecuteNonQuery();
            adapter.SelectCommand = Command;
            adapter.Fill(dataSet);
            Table = dataSet.Tables[0];
        }
        catch (Exception e)
        {
            MessageBox.Show("A Error occured whilst trying to execute the command.\n" + e.Message);
        }

        return Table;

DBMS 不断发回“查询不完整” - 我假设Command变量正在发送字符串query而不将参数从更改@1Company


这是一段代码(我的),它确实有效。这是一个插入语句,而不是一个选择 - 如果我错了,请纠正我,但它也不能与 SELECT 一起使用

private void MainActionsInsert(string Action, bool Checked)
{
    OleDbCommand Command = new OleDbCommand("INSERT INTO MainActions Values (ID, Action, BoolValue)", DataBaseConnection);
    //Add Parameters
    Command.Parameters.AddWithValue("ID", GenerateID());
    Command.Parameters.AddWithValue("Action", Action);
    Command.Parameters.AddWithValue("BoolValue",Checked);
    //Add Command
    MainActionsAdapter.InsertCommand = Command;
    //Execute Agains DataBase
    Command.ExecuteNonQuery();
    //Accept Changes
}

`

4

2 回答 2

4

OLEDb 无法识别命名参数。您必须?在查询文本中使用。

但是,您也不能在参数化查询中使用动态表名,因此即使使用 a?也无济于事。

您需要使用完整的动态 SQL,尽管这可能会使您面临 SQL 注入。确保您阅读了我链接的完整文章。

于 2012-05-17T13:15:02.763 回答
1

OleDbCommand 不接受参数化 SQL,只是不在 From 子句中 - 它必须在WHERE子句或类似的东西中。就像您说的那样,它与插入功能一起使用,因为它需要那里的“参数”。例如,这将起作用

    query = "Select * From Company Where @param = 1";
    OleDbCommand Command = new OleDbCommand(query, sqlConnStr);

    DataTable Table = new DataTable();
    DataSet dataSet = new DataSet();
    Table = null;

    //Add Parameters
    Command.Parameters.AddWithValue("param", "ID");

    try
    {
        Command.ExecuteNonQuery();
        adapter.SelectCommand = Command;
        adapter.Fill(dataSet);
        Table = dataSet.Tables[0];
    }
    catch (Exception e)
    {
        MessageBox.Show("A Error occured whilst trying to execute the command.\n" + e.Message);
    }

    return Table;

有趣的是,尽管它不适用于该Select部分

于 2012-05-17T15:33:26.763 回答