حصلت على ORA-01843 عندما أحاول إدراج التاريخ والوقت إلى Oracle
سؤال
لدي ANB B بتنسيق سلسلة
A = 14/01/2007
ب = 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 (ب) الشيء الصحيح.
هذا ايضا:
"insert into MyTbl(Tdate,Ttime) value ("
يجب أن يكون هذا:
"insert into MyTbl(Tdate,Ttime) values ("
... لكنني أعتقد أن هذا مجرد خطأ مطبعي هنا.
ومع ذلك ، جربت طريقة جون ، لم ينجح الأمر بالنسبة لي للتاريخ أيضًا. لذلك وجدت هذه الطريقة ل DateTime. ربما يساعد هذا شخص ما في المستقبل القادم أيضًا.
OracleParameter oPrm;
oPrm = cmd.CreateParameter();
oPrm.ParameterName = ":myDate";
oPrm.OracleDbType = OracleDbType.Date;
oPrm.Value = DateTime.Now; //for date
cmd.Parameters.Add(oPrm);