[英]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.