私は文字列形式で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 エラーが発生しました。どうすればよいですか?
前もって感謝します
生の 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();
}
(もちろん、実際のフィールドのタイプに合わせて調整してください。)
エラーは月によるものです。試してください:
TO_DATE(A, 'DD/MM/YYYY')
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 ("
...しかし、それは単なるタイプミスだと思います。