0

Oracle を使用して 2 つの日付の間の日付を確認する必要があるクエリがあります。コードを実行するたびに、ORA-01843: not a valid month エラーが発生します。ただし、SQL から 2 つのパラメーターのいずれかを削除すると正常に動作しますが、2 つの日付パラメーターを使用しようとするとエラーが発生します。私は何が欠けていますか?

        StringBuilder sql = new StringBuilder();
        DateTime yearBegin = new DateTime(Convert.ToInt32(taxYear) + 1, 1, 1);
        DateTime yearEnd = new DateTime(Convert.ToInt32(taxYear) + 1, 12, 31);
        sql.Append(
            "SELECT * FROM TABLE WHERE FIELD = '1099' AND CREATED_DT >= TO_DATE(:createdYearBegin, 'MM/DD/YYYY') AND CREATED_DT <= TO_DATE(:createdYearEnd, 'MM/DD/YYYY') AND SSN = :ssn");
        try
        {
            using (OracleConnection cn = new OracleConnection(ConfigurationManager.AppSettings["cubsConnection"]))
            using (OracleCommand cmd = new OracleCommand(sql.ToString(), cn))
            {
                cmd.Parameters.Add("ssn", ssn);
                cmd.Parameters.Add("createdYearBegin", yearBegin.ToShortDateString());
                cmd.Parameters.Add("createdYearEnd", yearEnd.ToShortDateString());
                cn.Open();
                OracleDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                ret = dr.HasRows;
            }
        }
4

3 に答える 3

1

パラメータの順序に問題があると思います。

パラメータを名前でバインドしない場合は、位置でバインドされます (つまり、パラメータを追加した順序が適用されます)。

追加してみてください:

cmd.BindByName = true;
于 2014-01-09T16:25:06.713 に答える
0

ToShortDateString の結果を出力すると、何が起こるかがわかります。また、「デフォルトに頼ることはできないので、フォーマットを提供する必要があります」に同意します。

于 2014-01-09T16:29:19.463 に答える
0

としてフォーマットされた日付が期待されますが、 がこのフォーマットでそれを返すことMM/DD/YYYYは保証されていません。ToShortDateString()フォーマット仕様が必要です。しかし、私はあなたがさらに支援を提供するために使用しているプログラミング言語が何なのかさえ知りません...

于 2014-01-09T16:25:46.297 に答える