質問

私は文字列形式で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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top