【问题标题】:Specified Cast Invalid with DataRow value使用 DataRow 值指定的强制转换无效
【发布时间】:2013-08-23 21:54:24
【问题描述】:

在将我的网站从本地移动到 Web 服务器时遇到一个错误,我有点难过。在本地我没有得到这个代码的错误,在网络服务器上我得到“指定的演员是无效的”。

抛出错误的代码行是:

DateTime expirationDate = (DateTime)dtUser.Rows[0]["PasswordExpirationDate"];

我认为这是从数据库中获取 DateTime 并在 C# 中使用它的有效方法。我已验证该值不为空,目前为 2013-11-18 16:41:41.937

我已经尝试切换到 Convert.ToDateTime(dtUser.Rows[0]["PasswordExpirationDate"]) 并且无论是否添加了 .ToString() 都失败了。

我找不到 Web 服务器抛出此错误而本地没有的原因。有没有人有更好的方法来获得这个值,或者关于网络服务器可能存在什么问题的任何想法?

【问题讨论】:

  • 那么它是数据库中的字符串(varchar)还是日期时间?你如何填充它,使用 DataAdapter 还是手动填充?数据库架构是相同还是不同?
  • 是数据库中的日期时间。它用 SqlDataAdapter 填充。这些站点都使用相同的数据库,因此架构是相同的。
  • 什么意思是“它以 2013-11-18 16:41:41.937 的形式出现”。它是DataTable 中的字符串吗? sql-query 怎么样,你真的选择了 datetime-field 而没有转换成 varchar 吗?
  • 如果我在调试器中捕获它,我会看到上面给出的值。如果我对此进行观察,dtUser.Rows[0]["PasswordExpirationDate"],它在窗口中对我来说就像一个 DateTime。我看到的是 DateTime 对象的属性,而不是字符串或其他任何东西。老实说,它看起来甚至不需要演员表。查询是“SELECT PasswordExpirationDate FROM Users WHERE UserID = @UserID”

标签: .net sql datetime datatable


【解决方案1】:

请使用文化,它会帮助你。

string result = Convert.ToDateTime(dtUser.Rows[0["PasswordExpirationDate"].toString(),
System.Globalization.CultureInfo.InvariantCulture);

【讨论】:

  • 如果它是数据库中的datetime,将其转换为字符串和从字符串转换更有可能引入错误而不是解决它们。
  • 这行不通,我需要它是一个 DateTime 用于获取时间跨度等。
  • 我不会将其转换为字符串。如果我尝试简单地使用 dtUser.Rows[0]["PasswordExpirationDate"],我会收到一条错误消息,提示我缺少演员表。所以我开始铸造只在本地工作的价值。我只是尝试将其转换为字符串并返回以修复错误,但没有任何效果。
  • @CoreyT:请尝试新编辑。对于不在本地的服务器上的 int 转换,我遇到了同样的问题。愿它对你有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 2018-05-27
  • 2014-07-30
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多