La Conversion de type DBNull de type 'String' n'est pas valide lors de l'insertion de données à partir de datagridview à la base de données sql

Bonjour les gens, je suis un débutant programmeur de vb.net, donc j'ai ce problème jusqu'à présent, je suis à la recherche d'une réponse similaire mais n'a trouvé aucune chance, alors j'ai décidé de poster mon problème.

si elle est ici.

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click

    Dim connstr As String = "server=midtelephone\sqlexpress; database=testdb; user= sa; password=sa;"

    cmdconn = New SqlConnection
    cmd = New SqlCommand
    cmdconn.ConnectionString = sqlstr
    cmd.Connection = cmdconn
    cmdconn.Open()

    Dim period, VOUCH_AMT, INDIVIDUAL_AMT, check_no, D_MAILED, DIR_NO As String
    For i As Integer = 0 To Me.DataGridView1.Rows.Count - 1

        'cmd.CommandText = "insert into tobee.EBD_BILLHISTORY(period, vouch_amt, individual_amt, check_no, d_mailed, dir_no) values" &_
        '" (@period,@VOUCH_AMT,@INDIVIDUAL_AMT,@check_no,@D_MAILED,@DIR_NO)"

        period = Me.DataGridView1.Rows(i).Cells(0).Value()
        VOUCH_AMT = Me.DataGridView1.Rows(i).Cells(1).Value()
        INDIVIDUAL_AMT = Me.DataGridView1.Rows(i).Cells(2).Value()
        check_no = Me.DataGridView1.Rows(i).Cells(3).Value()
        D_MAILED = Me.DataGridView1.Rows(i).Cells(4).Value()
        DIR_NO = Me.DataGridView1.Rows(i).Cells(5).Value()

        cmd.CommandText = "insert into tobee.EBD_BILLHISTORY(period, vouch_amt, individual_amt, check_no, d_mailed, dir_no)values" & _
            "('" & period & "','" & VOUCH_AMT & "','" & INDIVIDUAL_AMT & "','" & check_no & "','" & D_MAILED & "', '" & DIR_NO & "')"
        cmd.ExecuteNonQuery()
        MsgBox("Saved")
    Next
    cmdconn.Close()

End Sub

j'aimerais mettre à jour ma base de données sql par le biais de datagridview.

( qui datagridview a été appelé à partir d'une autre requête sql - cmd.CommandText = " select période, VOUCH_AMT, INDIVIDUAL_AMT, check_no, D_MAILED, DIR_NO de tobee.EBD_BILLHISTORY où CLAIM_NO comme '" + claimno.ToString + "'"sélectionner la période, VOUCH_AMT, INDIVIDUAL_AMT, check_no, D_MAILED, DIR_NO de tobee.EBD_BILLHISTORY où CLAIM_NO comme '" + claimno.ToString + "'")

maintenant, le problème est/sont,
l'erreur/s venu lorsque je clique sur le bouton enregistrer.
chaque fois que je clique sur le bouton enregistrer en laissant les autres colonnes vides. les erreurs s'affiche
"invalidcastexception était non gérée" (sur certaines lignes qui est vide)
-Conversion de type DBNull de type 'String' n'est pas valide.

aaaaaand.. une autre erreur arrive lors de l'insertion de valeur différente dans chaque lignes.
spécialement quand je veux insérer une valeur de type datetime. pas vraiment familier avec le code.

est-il quelque chose de mal avec mon code?
tous les procédés sont bons(comme arracher les données) à l'exception cliquant sur le bouton enregistrer.
ou la mise à jour de ma base de données. merci à l'avance. vos réponses sont très appréciées.

  • J'ai mis à jour le code de nouveau s'il vous plaît prendre un coup d'oeil, c'est un peu plus de lignes. J'ai inclus la vérification de la valeur Null/Rien, DBNull, valeur vide.
  • merci à vous, toutes les lignes procédé à aucune erreur, mais 1 chose est mon souci.. les modifications que j'ai apportées dans le datagridview n'est pas mise à jour dans ma base de données sql quand je clique sur le bouton enregistrer. de toute façon, je vais poster une nouvelle question, ou u peut m'aider à trouver une solution ici et maintenant? :O merci d'avance
  • avez-vous une source de données sous-jacente dans le datagridview?
  • en fait, il est, le datagridview(EBD_billhistory table) a été tiré vers le haut à partir d'un "private Sub loaddgvfrm3()" cmd.CommandText = "select période, VOUCH_AMT, INDIVIDUAL_AMT, check_no, D_MAILED, DIR_NO de tobee.EBD_BILLHISTORY où CLAIM_NO comme '" + claimno.ToString + "'" Dim dt à New DataTable da = New SqlDataAdapter da.SelectCommand = cmd da.De remplissage(dt) frmEb.DataGridView1.DataSource = dt cmdconn.Close()
  • en fait ,c'private sub a été tiré vers le haut à partir d'une autre forme.. fait je vous ai donné les informations appropriées? ou u êtes à la recherche pour de vastes info?
InformationsquelleAutor Newbie matt | 2014-02-10