私はOracleに日付と時刻を挿入しようとすると、ORA-01843を得ました
質問
私は文字列形式でANBのBを有する
A = 14/01/2007
B =夜10時10分39秒
私は、日付と時刻を挿入しようとします:
SQL = "insert into MyTbl(Tdate,Ttime) value ('" + Convert.ToDateTime(A) + "','" + Convert.ToDateTime(B) + "')";
私は何ができるのか、ORA-01843エラーを得たか。
事前に感謝の
解決
エラーが月に起因して、試します:
TO_DATE(A、 'DD / MM / YYYY')
他のヒント
の値を挿入するために、生の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();
}
(もちろん実際のフィールドの種類を調整。)
Oracleは、時間のみのフィールドを持っていないことに注意してください。
あなたは日時に時間だけのフィールドを挿入しようとしています。私の推測では、CLRが有効なOracle日付ではありませんこれは、00/00/00夜09時10分39秒にBを回しているということです。たとえばます:
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 ("
...しかし、私はここにそのちょうどタイプミスを推測してます。
しかし、私はまた、日付、時間のために私のためにそれdidntの仕事、ジョンの方法を試してみました。だから私は、日時のため、この方法を見つけました。たぶんそれも次の未来の誰かを助けます。
OracleParameter oPrm;
oPrm = cmd.CreateParameter();
oPrm.ParameterName = ":myDate";
oPrm.OracleDbType = OracleDbType.Date;
oPrm.Value = DateTime.Now; //for date
cmd.Parameters.Add(oPrm);
所属していません StackOverflow