【问题标题】:i'm getting this runtime error message "Object cannot be cast from DBNull to other types."我收到此运行时错误消息“无法将对象从 DBNull 转换为其他类型。”
【发布时间】:2014-06-16 07:17:02
【问题描述】:
Public Sub uploadVehicle_Transaction()
        Try
            Dim VT As New DataTable
            VT = New Statn_Sync.DataSetTableAdapters.Vehicle_TransactionsTableAdapter().GetData()
                  For Each dr As DataRow In VT.Rows
                     Dim MOV As String = comT.insertVehicle_Transaction(Convert.ToUInt64(dr("TransactionID")), _
                                                                   Convert.ToDateTime(dr("Transaction_date")), _
                                                                   Convert.ToUInt32(dr("Bank")), _
                                                                   Convert.ToString(dr("Teller_number")), _
                                                                   Convert.ToUInt32(dr("Amount")), _
                                                                   Convert.ToString(dr("Generated_by")), _
                                                                   Convert.ToString(dr("Station")), _
                                                                   Convert.ToString(dr("Customer_name")), _
                                                                   Convert.ToUInt32(dr("Transaction_category")), _
                                                                   Convert.ToString(dr("Deposit_slip")), _
                                                                   Convert.ToUInt32(dr("Sync")), _
                                                                   Convert.ToDecimal(dr("Penalty")), _
                                                                   Convert.ToDecimal(dr("OGSG")), _
                                                                   Convert.ToDecimal(dr("CMR")), _
                                                                   Convert.ToDecimal(dr("Goshen")), _
                                                                   Convert.ToDecimal(dr("Insurance")), _
                                                                   Convert.ToDecimal(dr("OCost")), _
                                                                   Convert.ToDecimal(dr("OGSG_Renewal")), _
                                                                   Convert.ToDecimal(dr("De_pulse")))
                       AddToLog(Convert.ToString(dr("paytAdEntryID").ToString))
                 Next
        Catch ex As Exception
            AddToLog(ex.Message)
        End Try

End Sub

【问题讨论】:

    标签: vb.net sql-server-2008


    【解决方案1】:

    在这段代码中,您从 DataTable 中获取数据并将其转换为各种类型。好吧,其中一个值在数据库中为 null,因此 .Net 将其解释为 System.DbNull ...而且您不能这样转换。

    您可以检查 DbNull,如果找到则处理它,否则在安全时转换。

    这是同一问题的 C# 版本:Unable to cast object of type 'System.DBNull' to type 'System.String`

    【讨论】:

    • transactionID bigint 未选中,transaction_date datetime 未选中,银行 int 已选中,teller_number varchar(20) 未选中,金额 int 未选中,generated_by nvarchar(50) 未选中 station varchar(20)已选中,customer_name varchar(50) 已选中transaction_category int Unchecked,deposit_slip varchar(20) Checked sync int Unchecked, Penalty decimal(18, 2) Checked OGSG decimal(18, 2) Checked CMR decimal(18, 2) Checked Goshen decimal(18, 2) Checked Insurance decimal(18 , 2) 已检查 OCost 十进制(18, 2) 已检查 OGSG_Renewal 十进制(18, 2)已检查 De_pulse 十进制(18, 2) 已检查
    • @Brain Mackay 那是我的 MSSQLtable 结构,你认为我应该怎么做?
    • @olaseun28 表结构实际上是一个完全不同的对话,还有其他考虑因素。这里的问题是 VT.Rows 有一些带有空值的行。 Null 值很好,但您需要在转换之前检查 System.DbNull 并处理空值。如果你只是在这里做的转换,最终你会遇到一个null,它会抛出一个异常。
    • @olaseun28 你真的应该仔细看看我提供的链接,它有很多关于这个问题的详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 2013-08-23
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    相关资源
    最近更新 更多