【问题标题】:How can I implement IConvertible object in my code?如何在我的代码中实现 IConvertible 对象?
【发布时间】:2013-03-11 18:39:36
【问题描述】:

当我在数据网格列中输入完所有数据后 单击保存按钮后,此错误返回:

错误: system.data.dll 中出现“System.InvalidCastException”类型的未处理异常

附加信息:对象必须实现 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?

【问题讨论】:

  • 您认为您必须发布所有代码才能获得答案吗?哪一行产生了异常?事实上,你显然不知道自己在做什么。您不想将参数设置为类型。你想完成什么?
  • @JohnSaunders 是对的。从昨天开始,您一直在发布有关这段代码的帖子,寻求有关最基本内容的帮助。但这很好,如果至少你会接受为你提出的一些答案。

标签: sql vb.net datagrid ado.net iconvertible


【解决方案1】:

说实话,我真的不明白你为什么一直为参数的值分配一个类型......

当然,您想要的是将单元格的内容转换为正确的类型,例如在您想要做的第一行中:

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 个值,我不知道这是否是所需的行为,但这似乎很奇怪。

【讨论】:

    【解决方案2】:

    您想在每个参数中插入一个Type 值似乎很奇怪:

    adapter.InsertCommand.Parameters(0).Value = DataGrid1(i, 0).GetType
    

    该错误也很可能是由于尝试将 Type 转换为参数打算保存的各种数据类型。

    也许您打算改为执行以下操作:

    adapter.InsertCommand.Parameters(0).Value = DataGrid1(i, 0).Value
    

    【讨论】:

      猜你喜欢
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 2016-01-17
      相关资源
      最近更新 更多