问题:我使用datetime
类型的列获取了SQL数据库,并且我正在尝试将值传递给类型为DateTime
的c#API变量。
datetime format in SQL DB: 2011-11-14 00:00:00.000 // So that equals:
yyyy - MM - dd HH:mm:ss.ttt
以下是我尝试获得正确价值的一些尝试:
MyClass.MyProperty= Convert.ToDateTime(reader.GetSqlDateTime(0));
MyClass.MyProperty= Convert.ToDateTime(reader.GetDateTime(0));
MyClass.MyProperty= Convert.ToDateTime(reader.GetValue(0));
MyClass.MyProperty= DateTime.ParseExact(reader.GetValue(0).ToString(), "yyyy - MM - dd HH:mm:ss.ttt", CultureInfo.InvariantCulture);
每当我的尝试编译没有错误时,我得到以下输出:
0001-01-01T00:00:00
我还尝试与DateTimeOffset
结合并从字符串中获取DB的值,然后将其转换为Datetime,但VS
更新:
我尝试通过服务器在数据库上执行我的SQL语句,发现我的个人资料的UserGuid在所选列中没有任何时间。 (当我最初测试SQL语句时,我使用了不同的用户凭据)我修复了一些事情并调试了一些,现在连接和阅读器工作正常。我仍然有格式化的问题。
DB value: 2014-08-07 00:00:00.000
Output: 8/7/2014 12:00:00 AM
我试着告诉它如何使用ParseExact格式化DateTime格式,但它会抛出此异常:
System.FormatException' in mscorlib.dll
Additional information: String was not recognized as a valid DateTime.
以下是我的整个读者代码:
while (reader1.Read())
{
newUsagePlan.PlanValidityFrom = DateTime.ParseExact(Convert.ToString(reader1.GetValue(0)), "yyyy - MM - dd HH:mm:ss.ttt", CultureInfo.InvariantCulture);
string lol1 = reader1.GetValue(0).ToString(); // Output: "8/7/2014 12:00:00 AM"
string lol2 = reader1.GetSqlDateTime(0).ToString(); // Output: "8/7/2014 12:00:00 AM"
}
最终结论:
我现在很容易解决这个问题,只需使用它:
string sqlFormattedDate = reader1.GetDateTime(0).ToString("yyyy-MM-dd HH:mm:ss.fff");
获得所需的输出:2014-08-07 00:00:00.000
一条建议:尽量不要在单个项目中处理生产和开发数据库,当数据库数据存在不一致并且您不了解它时,它可能会让您大吃一惊。干杯:)