Jus*_*tin 11 c# sql-server datetime
我有一个存储在SQL服务器中的高精度日期,例如
2009-09-15 19:43:43.910
Run Code Online (Sandbox Code Playgroud)
但是,当我将该值转换为DateTime时,生成的DateTime值的毫秒值为0:
reader["Timestamp"] = 15/09/2009 19:43:43.000
Run Code Online (Sandbox Code Playgroud)
将这些DateTime值精确到毫秒级对我来说非常重要 - 这样做的最佳方法是什么?
更新:这是执行转换的代码:
DateTime myDate = (DateTime)reader[Timestamp"];
Run Code Online (Sandbox Code Playgroud)
SELECT声明没有什么特别之处,事实上它是SELECT *- 没有花哨的演员或任何东西
看起来,由simple返回的DateTime对象SqlDataReader没有填充Millisecond值
小智 16
我有同样的问题,经过一些阅读后发现,当你正在检索日期时
DateTime myDate = (DateTime)reader["Timestamp"];
Run Code Online (Sandbox Code Playgroud)
SQLDataReader会丢弃毫秒.但是,如果您使用SQLDataReader的GetDateTime方法,它将返回一个保留毫秒的DateTime对象:
reader.GetDateTime(reader.GetOrdinal("Timestamp"));
Run Code Online (Sandbox Code Playgroud)
这是因为DateTime的默认格式字符串不包括毫秒.
如果使用自定义格式,则会看到毫秒值.
一个例子:
public class Program
{
private static string connString = @"Data Source=(local);Initial Catalog=DBTest;Integrated Security=SSPI;";
public static void Main(string[] args)
{
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT * FROM MilliSeconds"))
{
cmd.Connection = conn;
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
DateTime dt = (DateTime)reader["TimeCollected"];
int milliSeconds = dt.Millisecond;
Console.WriteLine(dt.ToString("yyyy-MM-dd HH:mm:ss.fff"));
}
}
}
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
从具有以下值的数据库:
1 2009-09-22 18:11:12.057
2 2009-09-22 18:11:28.587
3 2009-09-22 18:11:29.820
Run Code Online (Sandbox Code Playgroud)
上面代码的结果输出是:
2009-09-22 18:11:12.057
2009-09-22 18:11:28.587
2009-09-22 18:11:29.820
Run Code Online (Sandbox Code Playgroud)
Jus*_*ant -1
以下是我尝试解决此问题的方法:
在调试器中逐步执行并查看 reader[Timestamp"] 的类型和值。如果该类型不是 SqlDateTime,那会让我怀疑 - 然后我会查看查询以找出该列返回另一个列的原因输入而不是 DATETIME (或 DATETIME2 等)
如果该值是 SqlDateTime 并且它确实包含毫秒,那么我会将转换视为问题的根源。为了验证这一点,我会尝试(在调试器或代码中)SqlDataReader.GetDateTime() 和 SqlDataReader.GetSqlDateTime() 来查看是否返回正确的结果。诚然,这似乎不太可能是问题的根源——选角应该可以正常工作。
如果 #1 中的值是 SqlDateTime 但不包含毫秒,那么我会查找数据库中的上游问题 - 换句话说,您的查询返回的内容没有毫秒。当您在 Management Studio 中执行完全相同的查询时,您看到毫秒吗?
我的猜测是这是一个与查询相关的问题。但我很想找到更多。