首页 > 解决方案 > 在 VB.Net 上将数据库表数据显示到列表视图时出错

问题描述

我正在使用 vb.net 2013 和数据库 sql server express。当我尝试将数据库显示到列表视图时,出现这样的错误

Microsoft.VisualBasic.dll 中出现“System.Reflection.AmbiguousMatchException”类型的未处理异常附加信息:重载解析失败,因为无法使用以下参数调用公共“添加”:“公共函数添加(项目为 System.Windows.Forms .ListViewItem.ListViewSubItem) As System.Windows.Forms.ListViewItem.ListViewSubItem':参数匹配参数 'item' 无法从 'DBNull' 转换为 'ListViewSubItem'。“公共函数添加(文本作为字符串)作为 System.Windows.Forms.ListViewItem.ListViewSubItem”:参数匹配参数“文本”无法从“DBNull”转换为“字符串”。

我的代码是这样的:

Sub ListViewForMasterBiaya()
    Call DatabaseConnection()
    Dim DT As New DataTable
    Dim DS As New DataSet
    CMD = New SqlCommand("SELECT * FROM EntriBiaya", CONN)
    DA = New SqlDataAdapter(CMD)
    DS.Clear()
    DA.Fill(DS, "EntriBiaya")
    DT = DS.Tables(0)
    ListViewMasterBiaya.Items.Clear()
    For i As Integer = 0 To DT.Rows.Count - 1
        With ListViewMasterBiaya
            .Items.Add(DT.Rows(i)("NoKode"))
            With .Items(.Items.Count - 1).SubItems
                .Add(DT.Rows(i)("JenisBiaya"))
                .Add(DT.Rows(i)("NoPol"))
                .Add(DT.Rows(i)("Debit"))
                .Add(DT.Rows(i)("Kredit"))
                .Add(DT.Rows(i)("Tabungan"))
                .Add(DT.Rows(i)("Angsuran"))
                .Add(DT.Rows(i)("Klaim"))
                .Add(DT.Rows(i)("TotalDiterima"))
            End With
        End With
    Next
End Sub

错误显示在第 19 行。有什么问题吗?请帮忙

标签: sql-servervb.net

解决方案


具体问题是,虽然您的某些字段确实包含 aString并且上述转换/转换可以隐式完成,但至少有一个字段为 NULL 并因此包含DBNull.Value,这不是该方法所期望的 aString或任何其他类型,这Add是错误消息告诉您的内容。如果您希望在字段为 NULL 时传递一个Stringto Add,那么您需要创建一个。

最简单的选择是简单地ToString调用ObjectDataRow. 这将处理已经是 aString的数据,其他类型的数据和 NULL,因为DBNull.ToString()返回String.Empty,例如

.Add(DT.Rows(i)("TotalDiterima").ToString())

推荐阅读