3

以下は私のSelect*関数のコードです-それはうまく機能し、SQL文字列をSelectFromCompany*からに変更するまですべてうまくいきます

        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パラメータをから@1に変更せずに文字列を送信していると思いますCompany


これが機能するコード(私のもの)です。これはselectではなくinsertステートメントです-間違っている場合は修正してくださいが、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は、From句に含まれていないパラメータ化されたSQLを受け入れます-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 に答える