我在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。
编辑:“无法推断出一种常见的类型,假定'对象'。”那是我目前得到的错误。
答案 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))