在VB.Net上将数据库表数据显示到ListView时出错

时间:2018-12-06 07:40:01

标签: sql-server vb.net

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

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

我的代码是这样的:

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行。出了点问题吗?请帮助

1 个答案:

答案 0 :(得分:2)

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

最简单的选择是简单地调用从ToString获得的Object参考上的DataRow。这将处理已经是String的数据,其他类型的数据和NULL,因为DBNull.ToString()返回String.Empty,例如

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