2

以下のコードを投稿しました Access 2002-2003 データベースからデータを取得しようとしています

WHERE 句の後にすべてを取り出して"SELECT * FROM [{0}]を使用すると、問題なくテーブルからすべてのデータが取得されます。フィールド名を再確認しましたが、間違いなく正しいです。さらに同じフィールド名を持つ 1 つのテーブルよりも多いので、フィールド名の前にテーブル名を含める必要があるかもしれないと考えましたが、テーブルの有無にかかわらず、同じ例外が発生します。角括弧の位置を移動しようとしましたが、再び成功せずに...

WHERE句の1つだけを含めても、コードは機能しなくなり、私の人生では理由を理解できません..ここやこのエラーに関連する他のサイトの多数の投稿を何時間も見て、しかし、どの提案も私を助けませんでした..

宛先フィールドは、Access の「メモ」フィールドです。次のコレクション フィールドは日付フィールドです。GVars.currentDate は、コードの早い段階で今日の日付に設定されています (時間部分は 00:00:00 に設定されています)。GVars.thisFY も、これの前に文字列としてプログラムで設定されます。

ヒントをいただければ幸いです。

string sql;
OleDbDataAdapter adapter;

sql = string.Format(
    "SELECT * FROM [{0}] WHERE {0}.[Destination] = @Destination AND {0}.[Next Collection] BETWEEN @NextCollectionA AND @NextCollectionB"
    , GVars.thisFY);

// Create the command object
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;

// Add values to the fields
cmd.Parameters.AddWithValue("@Destination", "Henwood");
cmd.Parameters.AddWithValue("@NextCollectionA", GVars.currentDate);
cmd.Parameters.AddWithValue("@NextCollectionB", GVars.currentDate.AddDays(1));

adapter = new OleDbDataAdapter(cmd.CommandText, conn);

System.Diagnostics.Debug.Print(cmd.CommandText);
try
{
     adapter.Fill(ds);

     GVars.bLblLastUpdate = DateTime.Now.ToString("HH:mm:ss");
}
catch (Exception ex)
{
}

編集:答えてくれたVladislavに感謝します。以下に投稿されたコードを修正しました:

string sql;
OleDbDataAdapter adapter;


sql = string.Format(
            "SELECT * FROM [{0}] WHERE [{0}].[Destination] = @Destination AND [{0}].[Next Collection] BETWEEN @NextCollectionA AND @NextCollectionB"
            , GVars.thisFY);

// Create the command object
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Connection = conn;

// Add values to the fields
cmd.Parameters.Add("@Destination", OleDbType.Char).Value = "Henwood";
cmd.Parameters.Add("@NextCollectionA", OleDbType.DBDate).Value = GVars.currentDate;
cmd.Parameters.Add("@NextCollectionB", OleDbType.DBDate).Value = GVars.currentDate.AddDays(1);

adapter = new OleDbDataAdapter(cmd);

try
{
    adapter.Fill(ds);

    GVars.bLblLastUpdate = DateTime.Now.ToString("HH:mm:ss");
}
4

1 に答える 1

1

追加するパラメーターの型を指定してみてください。

私が気付いたもう 1 つのことは、アダプターに CommandText のみを渡していることです。コマンド オブジェクト全体を渡す必要があります。

于 2013-06-11T09:25:19.043 に答える