尝试将字符串格式(dd-mm-yyyy hh:mm:ss)转换为(yyyy-mm-dd hh:mm:ss)日期格式

时间:2019-06-04 11:01:10

标签: c# sql oracle

我正在使用这种格式的字符串变量从oracle捕获日期 string val1 = "30-03-2019 16:42:58",并尝试以(datetime)格式将其存储在sql数据库中,例如val2 = "2019-03-03 16:42:58.000"

从Oracle数据库中将日期存储在字符串变量中

string val2 = row["t_in_o"].ToString();

并像这样在sql中插入

myCommand.Parameters.AddWithValue("@t_in_s",val2);

预期

string val2="30-03-2019 16:42:58"

字符串变量val2应该存储在 日期变量date_V为date_V="2019-03-03 16:42:58.000"

错误消息 从nvarchar数据类型到datetime数据类型的转换导致值超出范围。 该声明已终止。

3 个答案:

答案 0 :(得分:2)

您需要先将日期字符串转换为datetime。

string val2= row["t_in_o"].ToString(); 
Datetime date = DateTime.Parse(val2);

myCommand.Parameters.Add("@t_in_s", SqlDbType.DateTime).Value = date;

答案 1 :(得分:1)

Oracle日期实际上没有格式。

如果要在数据库中存储一个字符串,只需告诉oracle这是一个to_date的日期

insert into Mytable (thedate)
values 
(to_date(:stringval1, 'DD-MM-YY HH24:MI:SS'))

答案 2 :(得分:-1)

首先请注意,您试图以毫秒为单位将值存储到SQL数据库中,但是没有从oracle获取的字符串形式(由于发布摘要),因此该值始终为.000。

但是您可以使用以下代码完成此操作:

    string val2 = DateTime.ParseExact(row["t_in_o"].ToString(), "dd-MM-yyyy HH:mm:ss", 
                                        CultureInfo.InvariantCulture)
                                        .ToString("yyyy-MM-dd HH:mm:ss.fff");

请注意,我不知道您在row["t_in_o"]中存储哪种类型的值,因此我将其计为string,如果您将此值转换为DateTime,已经删除了无用的{{ 1}},并使用Convert.ToDataTime