在DateTime类型的SQL输出中未显示毫秒数

时间:2016-04-01 12:15:04

标签: c# sql sql-server datetime

我在查看DATETIME类型列的毫秒组件时遇到问题。

定义表的代码是:

string command = string.Format("CREATE TABLE {0}(EventDateTime DATETIME, layer3Id VARCHAR(35), EventType VARCHAR(55), Protocol VARCHAR(30), MessageBody VARCHAR(MAX), MessageContent VARCHAR(MAX))", tableName);
SendSqlCommand(command);

填充该行的代码是:

string insertCommand = string.Format(@"INSERT INTO {0} VALUES (@p1, @p2, @p3, @p4, @p5, @p6)", tablename);

_con.Open();

using (SqlCommand cmd = new SqlCommand(insertCommand, _con))
{
    cmd.Parameters.AddWithValue("@p1", record.EventDateTime);
    cmd.Parameters.AddWithValue("@p2", record.layer3Id);
    cmd.Parameters.AddWithValue("@p3", record.EventType);
    cmd.Parameters.AddWithValue("@p4", record.Protocol);
    cmd.Parameters.AddWithValue("@p5", record.MessageBody);
    cmd.Parameters.AddWithValue("@p6", record.MessageContent);

    cmd.ExecuteNonQuery();
}

其中EventDateTime字符串值类似于2016/01/09 16:10:08.500

当我在桌面上运行查询时,我会回复:09/01/2016 16:10:08

没有毫秒。我不知道这些值是否会进入数据库,或者是否使用了错误的类型,或者查询是否没有正确响应:

TestTable.Take (100)

2 个答案:

答案 0 :(得分:1)

因此,假设您在数据库中拥有这些值:

enter image description here

通过运行纯sql语句,您应该能够以您预期的格式检索日期时间,以毫秒为单位

enter image description here

在您的C#中,您可以控制格式,这是一个示例:

            var res = db.MyTables.Take(100);

            foreach(var date in  res)
            {
                Console.WriteLine(Convert.ToDateTime(date.EventDateTime).ToString("dd/MM/yyyy hh:mm:ss.fff"));
            }

这是输出:

enter image description here

答案 1 :(得分:0)

毫秒。你只是不显示它们。

因此,当您从数据库中读取时间时,需要将其格式化为输出,如下所示:

string s;
s.Format("{0:yyy-MM-dd hh:mm:ss.fff}", record.EventDateTime)

现在您可以显示变量s