我有字符串格式中的ANB乙得到ORA-01843,當我嘗試插入日期和時間到Oracle
A = 14/01/2007
B = 22時10分39秒
我嘗試插入日期和時間:
SQL = "insert into MyTbl(Tdate,Ttime) value ('" + Convert.ToDateTime(A) + "','" + Convert.ToDateTime(B) + "')";
我得到ORA-01843錯誤,我可以做什麼?
感謝的提前
我有字符串格式中的ANB乙得到ORA-01843,當我嘗試插入日期和時間到Oracle
A = 14/01/2007
B = 22時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將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 ("
...但我猜這就是這裏只是一個錯字。
但是我想喬恩方法,它沒有爲我工作的日期也時刻。所以我發現這種方法的日期時間。也許這會在未來幫助別人。
OracleParameter oPrm;
oPrm = cmd.CreateParameter();
oPrm.ParameterName = ":myDate";
oPrm.OracleDbType = OracleDbType.Date;
oPrm.Value = DateTime.Now; //for date
cmd.Parameters.Add(oPrm);
變量SQL包含什麼後,顯示賦值? – mjv
另外,哪些數據類型是Tdate和Ttime? –