将dbnull转换为字符串。在数据库中记录dbnull.value而不是Nothing

时间:2012-12-13 16:57:40

标签: sql vb.net string dbnull

我在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插入数据库时​​,它会记录为可能的最小日期,例如1/1/1900。

编辑:“无法推断出一种常见的类型,假定'对象'。”那是我目前得到的错误。

2 个答案:

答案 0 :(得分:0)

由于SQL Server端的内容,这几乎肯定会发生。您很可能要么使用最小日期调用正在替换Null的存储过程,要么(更有可能)您要插入的表具有指定最小日期的Trigger或Default列值当它是空的时候。


只是为了澄清:首先,您不必担心将Nothing转换为DBNull,ADO.net应该为您做到这一点。

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

答案 1 :(得分: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))