我有一个字符串格式的ab B
A = 14/01/2007
B = 22:10:39
我尝试插入日期和时间:
SQL = "insert into MyTbl(Tdate,Ttime) value ('" + Convert.ToDateTime(A) + "','" + Convert.ToDateTime(B) + "')";
我收到了ORA-01843错误,我该怎么办?
提前谢谢
答案 0 :(得分: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();
}
(显然会根据实际字段的类型进行调整。)
答案 1 :(得分:2)
错误是由于月份,请尝试:
TO_DATE(A,'DD / MM / YYYY')
答案 2 :(得分:1)
请记住,Oracle没有时间字段。
您正在尝试将仅限时间字段插入日期时间。我的猜测是CLR将B变为00/00/00 22:10:39,这不是一个有效的oracle日期。例如:
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 ("
......但我猜这只是一个错字。
答案 3 :(得分:1)
然而,我尝试了Jon方法,它对我来说也不适用于约会时间。所以我在datetime找到了这个方法。也许这对未来的某个人也有帮助。
OracleParameter oPrm;
oPrm = cmd.CreateParameter();
oPrm.ParameterName = ":myDate";
oPrm.OracleDbType = OracleDbType.Date;
oPrm.Value = DateTime.Now; //for date
cmd.Parameters.Add(oPrm);