当我在数据网格列中输入完所有数据时单击保存按钮后,此错误返回:
错误:未处理的System类型异常。InvalidCastException' occurred in system.data.dll
附加信息:Object必须实现IConvertible.
Dim sqlsyntax As String
sqlsyntax = "INSERT INTO tblOfficeEquipmentProfile(OE_ID, OE_Category,OE_SubCategory, OE_Name, OE_User, OE_Brand, OE_Model, OE_Specs, OE_SerialNo, OE_PropertyNo, OE_Static_IP, OE_Vendor, OE_PurchaseDate, OE_WarrantyInclusiveYear, OE_WarrantyStatus, OE_Status, OE_Dept_Code,OE_Location_Code,OE_Remarks)" _
& "VALUES(@OE_ID,@OE_Category,@OE_SubCategory,@OE_Name,@OE_User,@OE_Brand,@OE_Model,@OE_Specs,@OE_SerialNo,@OE_PropertyNo,@OE_Static_IP,@OE_Vendor,@OE_PurchaseDate,@OE_WarrantyInclusiveYear,@OE_WarrantyStatus,@OE_Status,@OE_Dept_Code,@OE_Location_Code,@OE_Remarks)"
Dim adapter As New SqlDataAdapter
adapter.InsertCommand = New SqlCommand(sqlsyntax, sqlconn)
adapter.InsertCommand.Parameters.Add("@OE_ID", SqlDbType.VarChar)
adapter.InsertCommand.Parameters.Add("@OE_Category", SqlDbType.Char)
adapter.InsertCommand.Parameters.Add("@OE_SubCategory", SqlDbType.Char)
adapter.InsertCommand.Parameters.Add("@OE_Name", SqlDbType.VarChar)
adapter.InsertCommand.Parameters.Add("@OE_User", SqlDbType.VarChar)
adapter.InsertCommand.Parameters.Add("@OE_Brand", SqlDbType.VarChar)
adapter.InsertCommand.Parameters.Add("@OE_Model", SqlDbType.VarChar)
adapter.InsertCommand.Parameters.Add("@OE_Specs", SqlDbType.VarChar)
adapter.InsertCommand.Parameters.Add("@OE_SerialNo", SqlDbType.VarChar)
adapter.InsertCommand.Parameters.Add("@OE_PropertyNo", SqlDbType.VarChar)
adapter.InsertCommand.Parameters.Add("@OE_Static_IP", SqlDbType.VarChar)
adapter.InsertCommand.Parameters.Add("@OE_Vendor", SqlDbType.VarChar)
adapter.InsertCommand.Parameters.Add("@OE_PurchaseDate", SqlDbType.SmallDateTime)
adapter.InsertCommand.Parameters.Add("@OE_WarrantyInclusiveYear", SqlDbType.Int)
adapter.InsertCommand.Parameters.Add("@OE_WarrantyStatus", SqlDbType.Char)
adapter.InsertCommand.Parameters.Add("@OE_Status", SqlDbType.VarChar)
adapter.InsertCommand.Parameters.Add("@OE_Dept_Code", SqlDbType.Char)
adapter.InsertCommand.Parameters.Add("@OE_Location_Code", SqlDbType.Char)
adapter.InsertCommand.Parameters.Add("@OE_Remarks", SqlDbType.VarChar)
For i As Integer = 0 To DataGrid1.VisibleRowCount - 1
adapter.InsertCommand.Parameters(0).Value = DataGrid1(i, 0).GetType
adapter.InsertCommand.Parameters(1).Value = DataGrid1(i, 1).GetType
adapter.InsertCommand.Parameters(2).Value = DataGrid1(i, 2).GetType
adapter.InsertCommand.Parameters(3).Value = DataGrid1(i, 3).GetType
adapter.InsertCommand.Parameters(4).Value = DataGrid1(i, 4).GetType
adapter.InsertCommand.Parameters(5).Value = DataGrid1(i, 5).GetType
adapter.InsertCommand.Parameters(6).Value = DataGrid1(i, 6).GetType
adapter.InsertCommand.Parameters(7).Value = DataGrid1(i, 7).GetType
adapter.InsertCommand.Parameters(8).Value = DataGrid1(i, 8).GetType
adapter.InsertCommand.Parameters(9).Value = DataGrid1(i, 9).GetType
adapter.InsertCommand.Parameters(10).Value = DataGrid1(i, 10).GetType
adapter.InsertCommand.Parameters(11).Value = DataGrid1(i, 11).GetType
adapter.InsertCommand.Parameters(12).Value = DataGrid1(i, 12).GetType
adapter.InsertCommand.Parameters(13).Value = DataGrid1(i, 13).GetType
adapter.InsertCommand.Parameters(14).Value = DataGrid1(i, 14).GetType
adapter.InsertCommand.Parameters(15).Value = DataGrid1(i, 15).GetType
adapter.InsertCommand.Parameters(16).Value = DataGrid1(i, 16).GetType
adapter.InsertCommand.Parameters(17).Value = DataGrid1(i, 17).GetType
sqlconn.Open()
adapter.InsertCommand.ExecuteNonQuery()
MsgBox("success fully added")
adapter.InsertCommand.Parameters.Clear()
Next
sqlconn.Close()
如何在对象中实现IConvertible ?
说实话,我真的不明白你为什么一直给形参的值赋类型…
当然,您想要的是将单元格的内容转换为正确的类型,例如在您的第一行中,您想要这样做:
adapter.InsertCommand.Parameters(0).Value = CStr(DataGrid1(i, 0))
或
adapter.InsertCommand.Parameters(0).Value = DataGrid1(i, 0).ToString()
对于任意类型为Char
的参数。对于DateTime
或Int
类型参数,您将希望使用CDate()
和CInt
,但我不认为您希望使用GetType()
,因为这只是获得单元格中值的类型,而不是它的实际值。
另外,虽然你似乎有19个参数到你的命令,你只添加18个值给它,我不知道这是否是所需的行为,但它似乎很奇怪。
您想要在每个参数中插入Type
值似乎很奇怪:
adapter.InsertCommand.Parameters(0).Value = DataGrid1(i, 0).GetType
这个错误也很可能是由于试图将Type
转换为参数打算保存的各种数据类型。
也许你打算这样做:
adapter.InsertCommand.Parameters(0).Value = DataGrid1(i, 0).Value