1

我在 vb.net 中有一个使用参数查询的 insertRecord 函数。如果没有给出错误日期,我需要将 dbnull.value 插入 db 而不是 ""(Nothing)。

Dim strErrorDate2 As DateTime = Request.Form("dateOfErrorDatePicker2").ToString

.Add(New SqlParameter("@ErrorDate2", If(strErrorDate2 <> Nothing, strErrorDate2.Date, DBNull.Value)))

我不断收到 dbnull 到字符串的转换错误。最初它有自己的 if/else 块,我在其中初始化了变量,但我不知道如何正确转换它。我尝试了内联 if,但我仍然需要进行转换或尝试其他方法。

有任何想法吗?问题是,当我将空字符串或 DateTime 插入数据库时​​,它会记录为可能的最小日期,例如 1900 年 1 月 1 日。

编辑:“不能推断出一个常见的类型,假设是‘对象’。” 这就是我目前遇到的错误。

4

2 回答 2

0

这是因为 strErrorDate2.Date 是 DateTime 而 System.DbNull.Value 是一个对象。直接将 strErrorDate2 转换为 IF() 中的对象或执行类似的操作

Dim oErrorDate2 as Object = System.DbNull.Value

If strErrorDate2 <> Nothing Then oErrorDate = strErrorDate2

.Add(New SqlParameter("@ErrorDate2",oErrorDate2))
于 2012-12-13T18:28:03.293 回答
0

这几乎肯定会发生,因为您的 SQL Server 端有什么。很可能您正在调用一个存储过程,该存储过程将 Null 替换为最小日期,或者(更有可能)您插入的表具有分配最小日期的触发器或默认列值当它为空时。


澄清一下:首先,您不必担心将 Nothing 转换为 DBNulls,ADO.net 应该为您做这件事。

其次,如果您发送 SQL Server Nothing/Null 并存储其他内容,那是因为它(表或存储过程)正在用默认值替换 NULL。这很可能是因为数据设计不希望 NULL 出现在您尝试将它们插入到的列中。

于 2012-12-13T17:46:35.690 回答