3

私は文字列形式でAとBを持っています

A = 2007 年 1 月 14 日

B = 22:10:39

日付と時刻を挿入しようとしています:

SQL = "insert into MyTbl(Tdate,Ttime) value ('" + Convert.ToDateTime(A) + "','" + Convert.ToDateTime(B) + "')";

ORA-01843 エラーが発生しました。どうすればよいですか?

前もって感謝します

4

4 に答える 4

8

生の SQL を使用して値を挿入しないでください。代わりに、パラメーター化されたクエリを使用してください。通常の方法で文字列を .NET DateTime(またはDateTimeOffset) とTimeSpan値に解析し、次のようなものを使用します。

string sql = "insert into MyTbl(Tdate,Ttime) values (:date, :time)";
using (OracleCommand cmd = new OracleCommand(sql, connection))
{
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Add("date", OracleType.DateTime).Value = date;
    cmd.Parameters.Add("time", OracleType.IntervalDayToSecond).Value = time;
    cmd.ExecuteNonQuery();
}

(もちろん、実際のフィールドのタイプに合わせて調整してください。)

于 2009-10-14T15:35:39.663 に答える
2

エラーは月によるものです。試してください:

TO_DATE(A, 'DD/MM/YYYY')

于 2009-10-14T15:43:45.597 に答える
1

Oracle には時間のみのフィールドがないことに注意してください。

日時のみのフィールドを挿入しようとしています。私の推測では、CLR は B を 00/00/00 22:10:39 に変えていますが、これは有効なオラクル日付ではありません。例えば:

SQL> select to_date('00/00/00', 'MM/DD/YY') from dual;
select to_date('00/00/00', 'MM/DD/YY') from dual
               *
ERROR at line 1:
ORA-01843: not a valid month

いずれにせよ、 Convert.ToDateTime(B) はおそらく正しいものを返していません。

また、これ:

"insert into MyTbl(Tdate,Ttime) value ("

これである必要があります:

"insert into MyTbl(Tdate,Ttime) values ("

...しかし、それは単なるタイプミスだと思います。

于 2009-10-14T15:40:31.493 に答える