-1

保存ボタンをクリックしてデータグリッド列にすべてのデータを入力し終えると、このエラーが返されます。

エラー: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を実装するにはどうすればよいですか?

4

2 に答える 2

1

正直なところ、パラメータの値にタイプを割り当て続ける理由がよくわかりません...

確かに、必要なのは、セルのコンテンツを適切なタイプにキャストすることです。たとえば、最初の行で次のようにします。

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

またはおそらく

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

タイプのパラメータの場合CharDateTimeまたはIntタイプパラメータを使用しますが、実際の値ではなくセル内の値のタイプを取得するだけなので、使用しCDate()たくCIntないと思います。GetType()

また、コマンドに19個のパラメーターがあるように見えますが、コマンドに18個の値を追加しているだけです。それが望ましい動作かどうかはわかりませんが、奇妙に思えます。

于 2013-03-22T01:53:43.613 に答える
0

Type各パラメータに値を挿入するのは奇妙に思えます。

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

Typeこのエラーは、パラメータが保持しようとしているさまざまなデータ型に変換しようとしたことが原因である可能性もあります。

おそらく、代わりに次のことを行うつもりでした。

adapter.InsertCommand.Parameters(0).Value = DataGrid1(i, 0).Value
于 2013-03-22T01:50:19.407 に答える