繁体   English   中英

vb.net中的转换错误?

[英]Conversion error in vb.net?

我感到困惑的是,为什么它不检索数据并一直说我有一个错误“ InvalidCastException”,我目前正在紧凑型框架中进行这些操作,这对它来说是全新的,我四处寻找寻找一种将数据导入到列表视图中的方法基于我对Java的一点了解。 这些是我创建表格并在formload中插入

 Dim createTable3 As SqlCeCommand = connection.CreateCommand
        createTable3.CommandText = "CREATE TABLE product(product_id int IDENTITY(0,1) PRIMARY KEY,product_name nvarchar(50),bought_price float,sales_price float)"
        connection.Open()
        createTable3.ExecuteNonQuery()
 Dim insertCmd2 As SqlCeCommand = connection.CreateCommand
        insertCmd2.CommandText = "INSERT INTO product(product_name,bought_price)Values('Food',1.00)"
        insertCmd2.ExecuteNonQuery()

        Dim insertCmd3 As SqlCeCommand = connection.CreateCommand
        insertCmd3.CommandText = "INSERT INTO product(product_name,bought_price)Values('Orange',1.50)"
        insertCmd3.ExecuteNonQuery()

        Dim insertCmd4 As SqlCeCommand = connection.CreateCommand
        insertCmd4.CommandText = "INSERT INTO product(product_name,bought_price)Values('Apple',3.00)"
        insertCmd4.ExecuteNonQuery()

        Dim insertCmd5 As SqlCeCommand = connection.CreateCommand
        insertCmd5.CommandText = "INSERT INTO product(product_name,bought_price)Values('Fruit',2.00)"
        insertCmd5.ExecuteNonQuery()
        connection.Close()

这是获取信息按钮的代码

 Dim itmListItem As ListViewItem
        Dim shtFieldCntr As Short

        Dim loopCmd As SqlCeCommand = connection.CreateCommand
        loopCmd.CommandText = "SELECT * FROM product"
        connection.Open()
        Dim dr As SqlCeDataReader = loopCmd.ExecuteReader

        Do While dr.Read
            itmListItem = New ListViewItem()

            If dr.IsDBNull(dr(0)) Then
                itmListItem.Text = ""
            Else
                itmListItem.Text = dr(0)
            End If

            For shtFieldCntr = 1 To dr.FieldCount()
                If dr.IsDBNull(shtFieldCntr) Then
                    itmListItem.SubItems.Add("")
                Else
                    itmListItem.SubItems.Add(dr.GetString(shtFieldCntr)) ' error this line
                End If
            Next shtFieldCntr

            lvProduct.Items.Add(itmListItem)
        Loop
        connection.Close()

图片 替代文字

如果查看SqlCeDataReader.GetString的文档,它将在“备注”下提及:

没有进行转换; 因此,检索到的数据必须已经是一个字符串。

这就是为什么您收到InvalidCastException的原因。 除了product_name之外,您所有的字段都不是字符串。 您需要做的是:

itmListItem.SubItems.Add(Convert.ToString(dr.GetValue(shtFieldCntr)))

当您知道表中的所有字段是什么时,先调用它们,然后将它们显式添加到SubItems中,即会更有意义:

Dim productId As Int32 = dr.GetInt32(dr.GetOrdinal("product_id"))
Dim productName As String = dr.GetString(dr.GetOrdinal("product_name"))

itmListItems.SubItems.Add(productId)
itmListItems.SubItems.Add(productName)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM