【问题标题】:Converting null string to date将空字符串转换为日期
【发布时间】:2011-09-21 18:06:15
【问题描述】:

我搜索了高和低都无济于事,这是完成我的项目之前的最后一步,所以请帮助!提前致谢!

用户将在 gridview 中选择一个条目,然后将它们重定向到一个表单,该表单填充了来自所选行的数据(从而使 gridview 以更用户友好的方式可编辑)。空值被数据库接受,我想在相应的文本框中将空日期值显示为空白(或“”)。相反,我得到了错误:

从“DBNull”类型到“Date”类型的转换无效。

这是我的代码:

'preceded by connection code     
Dim sqlcmd As String = "SELECT * from Master WHERE RecNum = @recnum"
        'Dim sqlCmd As New OleDb.OleDbCommand("SELECT * from Master WHERE RecNum = @recnum", connection)
        Dim FileCommand3 As New OleDb.OleDbCommand(sqlcmd, connection)
        FileCommand3.Parameters.AddWithValue("@recnum", user)
        Dim Reader3 As OleDb.OleDbDataReader = FileCommand3.ExecuteReader()
        If Reader3.Read Then

            stock = myCStr(Reader3("StockNum"))
            make = myCStr(Reader3("Make"))
            color = myCStr(Reader3("Color"))
            stockin = myCStr(Reader3("Stockin"))
            ucistart = myCStr(Reader3("UCIStartDate"))
            repairs = Reader3("Repairs")
            tires = Reader3("tiresneeded")
            onlot = Reader3("onlot")
            sold = Reader3("sold")
            year = myCStr(Reader3("year"))
            model = myCStr(Reader3("model"))
            location = Reader3("location")
            srvcRO = myCStr(Reader3("svcROnum"))
            ucicompldate = myCStr(Reader3("uciestcompletedate"))
            collRO = myCStr(Reader3("collisionROnum"))
            other = myCStr(Reader3("other"))
            offprop = Reader3("offProperty")
            detail = (Reader3("detail")
        End If
        connection.Close()

        SoldCheckBX.Checked = sold
        DetailTXTbox.Text = detail
        'etc, etc
    End Sub

我使用函数 mycstr 修复了 dbnull to string 错误,但适应“日期”数据类型似乎没有那么简单

Function myCStr(ByVal test As Object) As String
    If isdbnull(test) Then
        Return ("")
    Else
        Return CStr(test)
    End If
End Function

【问题讨论】:

    标签: asp.net vb.net types type-conversion oledbdatareader


    【解决方案1】:

    当您从阅读器读取所有日期的值时尝试此操作,这将首先测试日期是否为 dbnull,如果是,则它将分配一个空值,您应该获得所需的空单元格,否则它会显示日期:

    ucistart = IIf(reader3("UCIStartDate") Is DBNull.Value, Nothing, reader3("UCIStartDate"))
    

    【讨论】:

    • 如果代码中没有设置日期,请不要忘记在保存时补偿另一端。 @ucistart = IIf (myObj.date 为 null ,DBNull.Value, myObj.Date);
    • 谢谢!!!做到了!....唯一的事情是我还在牢房里度过了时光。我将 ucistart 声明为日期...如何将其设置为没有时间的日期?
    • 酷,您可以格式化数据网格以仅显示日期,在 gridview 列中将数据格式字符串设置为: dataformatstring="{0:M-dd-yyyy}" 其中字符串是格式你希望它在
    • 为了清楚起见,我正在用来自数据读取器的值填充一个 asp 文本框,而不是表格中的单元格。我不再看到日期,但我仍然有时间(12:00 AM)。我试过使用 dataformatstring="{0:M-dd-yyyy}"。我也试过 {0:d}、{0:MM-dd-yyyy}。这些似乎都不起作用。关于获得一个完全空白的文本框的任何其他想法???谢谢!!
    • 好的,所以您可以在设置文本框值之前进行检查,即 If dt Nothing Then textbox1.Text = dt.ToString("M-dd-yyyy") Else textbox1.Text = " " 结束如果
    【解决方案2】:

    您是否尝试过使用 Convert.IsDBNull 函数?

    Here是官方文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 2011-11-28
      • 2016-05-03
      相关资源
      最近更新 更多