【问题标题】:VB.Net - Error in SQLDataReader and "Conversion from type 'DBNULL' to type 'Date' is not valid [duplicate]VB.Net - SQLDataReader 中的错误和“从类型'DBNULL'到类型'Date'的转换无效[重复]
【发布时间】:2016-10-26 16:17:36
【问题描述】:

我是 VB.Net 的新手,并且必须使用 VB.Net 做一个“崩溃完成”项目。我已经搞定了(仅用了 4 天),但现在遇到了一个严重的问题。

SQL Server 数据库中有一些日期列,其中一些为 NULL。我正在尝试构建一个网格控件,并有一个自定义类来处理每个“行”的数据。

我设置了 SQLDataReader:

Using sdr As SqlDataReader = cmd.ExecuteReader()

错误正在触发:

' this is an abbreviated statement of the original - many more values being passed
appsList.Add(New PromiseAppClass(sdr("PrimID"), sdr("lastname"),
     sdr("firstname"), sdr("middleinitial"), sdr("othernames"), 
     sdr("ssn"), sdr("date1"), sdr("date2")))   

date1 和 date2 在数据库中为 NULL,因此读者无法尝试转换以调用创建对象(我假设 - VB 对我来说不是太明确 - 详细说明问题在哪里在这儿)。这两项都在 PromiseAppClass 中设置为日期,使用普通的 getter/setter。

如何解决?是否有一种方法可以对类中的特定变量进行编码,以便可以在那里对其进行测试/设置?或者将上述语句中的 NULL 日期转换为可接受的日期的方法?我不想使用字符串,也不确定会不会遇到同样的问题,但现在它无法将 NULL 转换为字符串。

【问题讨论】:

  • 检查 null 像这样 sdr("date1") != null ?sdr("date1") : ""
  • 如果这是一个现有问题的完全重复 - 你能传递一个参考吗?我已经在这里(和其他地方)搜索了 3 个小时,但没有看到“确切”的副本。一般问题可能是相似的——我遇到的情况不一定相同——对我来说。直到 4 天前,我还没有使用 VB,甚至没有使用 VS(至少近 20 年没有)——所以如果我在这里遗漏了一些东西——我道歉。我有一个极端的时间表,我试图尽快破译。
  • sdr.IsDBNull(index) 会告诉您该索引处的列是否为 DbNull。如果是,您需要决定要通过什么。您不能将 DBNull 转换为作为错误消息点的日期,
  • 问题不重复!!

标签: sql asp.net .net vb.net sqldatareader


【解决方案1】:

尝试用

替换 sdr("date1")
 If(sdr("date1") is nothing,nothing,sdr("date1"))

或者

If(IsDbNull(sdr("date1")),nothing,sdr("date1"))

【讨论】:

  • 想想你刚刚做了什么:)。你基本上只是说如果日期什么都没有,那就什么都不传递,这与传递sdr("date1") 相同。
  • 编辑了我的代码 :)
  • Dim test As Date test = If(IsDBNull(sdr("date1")), "", sdr("date1")) 只是解决了问题,所以我现在不能将“”分配给日期...不能解决问题...抱歉转发 - 尝试习惯这个“论坛”...
  • 尝试用 Nothing 替换 ""
  • @H.Fadlallah 你的第一个例子是什么都不检查,如果真的没有通过,那是一样的。第二个例子可能就是那个。
猜你喜欢
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2015-06-07
  • 1970-01-01
  • 2014-06-10
  • 2012-11-19
  • 1970-01-01
相关资源
最近更新 更多