无法将DateTime从SQL Server转换为C#DateTime

Lei*_*eia 4 c# sql-server datetime

我在C#编写了一个使用日期的程序.它从SQL Server表中获取值.我使用的是Windows 7,程序运行正常.我有这行代码:

DateTime fechaOperacion = Convert.ToDateTime(reader["FechaOperacion"]);
Run Code Online (Sandbox Code Playgroud)

读者以24小时格式返回日期,我能够将其转换为DateTime变量.

现在我对Windows 10进行了系统升级,同样的代码行引发了以下错误:

字符串未被识别为有效的DateTime.从索引20开始有一个未知单词.

现在读者返回am/pm格式,而索引20则是am或pm

我试过以下的事情:

  • 将代码行改为:

    1. Convert.ToDateTime(reader["FechaOperacion"], System.Globalization.CultureInfo.InvariantCulture)
    2. reader.GetDateTime(reader.GetOrdinal("FechaOperacion"));
  • 将文化转换为24小时格式

    System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(1033);
    
    Run Code Online (Sandbox Code Playgroud)

但这些似乎都不起作用,我不知道还能做些什么.

Mar*_*ell 7

最终,这里的根本问题是存储一个表示日期/时间的值作为文本数据(意思是某种[n][var]char({max|n}),或者是推动[n]text).这有很多问题:

  • 它需要更多的空间
  • 它无法正确/有效地排序
  • 它无法正确/有效地编入索引
  • 它无法正确/有效地过滤
  • 它导致解析客户端和服务器之间的错误
  • 它有各种各样的本地化和国际化问题

你应该拥有的是datetime /date/ time/ etc列.然后将其存储为需要零解析的数字(不是字符串),并且可以可靠地工作而不会出现任何转换问题.


注意:可能是您正确存储它,但在select查询语句中格式化它.在这种情况下,就是不要这样做 ; 返回日期时间raw,让接收客户端担心如何显示它.