none
Access2007のレコードを日付型を条件に抽出する時の問題 RRS feed

  • 質問

  • お世話になっております。

    今自分が抱えている問題は、Access2007のレコードを日付/時刻型のフィールドを条件にC#でパラメータクエリを使って抽出しようとすると、

    ”抽出条件でデータ型が一致しません”

    というエラーが出てどうしようもありません。

     

    ソースを一部抜き出すと、

     

                //日付のパラメーター
                OleDbParameter olePara3 = oleCmd.CreateParameter();
                olePara3.ParameterName = "@Date";
                olePara3.DbType = DbType.Date;
                olePara3.OleDbType = OleDbType.Date;
                olePara3.Value = lblDate.Text.Substring(0, 5) + "01/01"; //2008/01/01という感じにしている
                oleCmd.Parameters.Add(olePara3);

    SQL文

                oleCmd.CommandText = "SELECT * FROM T_Result AS R LEFT JOIN T_Team AS T ON R.ID = T.ID " +
                    "WHERE R.mDate = @Date AND R.setsu = @Setsu AND T.Category = @Category AND T.activeFlag = YES ORDER BY T.ID";

    という感じでやっています。

    克服の方法を知っている方よろしくお願いします。

    2008年7月1日 21:34

回答

  • OleDbType.DBDateにしてみて下さい。

    2008年7月2日 0:46
    モデレータ
  •  freemann さんからの引用

    つまり、SQL文に出てきたパラメータの順番に、OleDbCommand.Parameters.Addしないといけないようです。

    これは、仕様なのでしょうか、それとも私の勘違いなのでしょうか。

     

    OleDbの仕様です。OleDbでは無名パラメータ、つまり、パラメータの順序に従ってパラメータを適用していきます。無名パラメータのプレースホルダは一般に?を使います。

    2008年7月2日 5:51
    モデレータ

すべての返信

  • OleDbType.DBDateにしてみて下さい。

    2008年7月2日 0:46
    モデレータ
  • 回答ありがとうございます。

    ご指摘いただいたことを検証していましたら、重大な原因が判明しました。

    OLE DBではパラメータークエリの名前が使われていない感じです。

    つまり、SQL文に出てきたパラメータの順番に、OleDbCommand.Parameters.Addしないといけないようです。

    これは、仕様なのでしょうか、それとも私の勘違いなのでしょうか。

     

    私のほうは、無事動くことができましたので問題はクリアされましたが、このことについてもう少しみなさんの意見があったら聞きたいなと思うので、もうしばらく閉めないでおきます。

     

    私の環境は

    VS2005

    Vista

    OFFICE2007

    です。

     

    2008年7月2日 4:50
  •  freemann さんからの引用

    つまり、SQL文に出てきたパラメータの順番に、OleDbCommand.Parameters.Addしないといけないようです。

    これは、仕様なのでしょうか、それとも私の勘違いなのでしょうか。

     

    OleDbの仕様です。OleDbでは無名パラメータ、つまり、パラメータの順序に従ってパラメータを適用していきます。無名パラメータのプレースホルダは一般に?を使います。

    2008年7月2日 5:51
    モデレータ
  • 回答ありがとうございます。

    仕様なのですね。これですっきりしました。

     

    2008年7月2日 5:58