Accepter valeur NULL comme sql parametre sur vb.net

- - Dernière réponse :  jerseyshore - 3 mai 2013 à 11:25
bonjour à tous , je me dirige vers parce que je bloque au niveau de mon projet de pfe (vb.net) . le probleme est le suivant :
je charge un fichier excel avec des enregistrement vers un datagridview tout ce passe nikel :ccool: ! deuxieme etape et c'est la ou se passe le probleme quant je veut enregistré le fichier vers une B.D sql , si toute les colonne sont pleine le fichier s'enregistre sans probleme mais il suffit qu'une colonne soit sans enregistrement par exemple la clonne 3 (@cole3) le fichier ne veut pas s'enregistré avec message d'erreur (La référence d'objet n'est pas définie à une instance d'un objet.) . je vous serez reconnaissant de votre aide .

voici mon code :

Try






cmd5.CommandText = "INSERT INTO caracteristique (Type_du_serveur, Nature_du_serveur, Rack, Systéme_d_Exploitation, Vérsion_SE, BDD, Vérsion_BDD, DD, partition_systeme, type_dd, partition_data, autre_partition, Cpu, Ram) VALUES (@Col1, @Col2, @Col3,@Col4, @Col5, @Col6 , @Col7, @Col8, @Col9, @Col10, @Col11, @Col12, @Col13, @Col14)"
cmd5.Connection = cn



cmd5.Parameters.Add("@Col1", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col2", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col3", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col4", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col5", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col6", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col7", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col8", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col9", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col10", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col11", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col12", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col13", SqlDbType.VarChar, 25)
cmd5.Parameters.Add("@Col14", SqlDbType.VarChar, 25)


cmd5.Prepare()



For Each row As DataGridViewRow In DataGridView2.Rows


If Not row.IsNewRow Then



cmd5.Parameters("@Col1").Value = row.Cells(3).Value.ToString
cmd5.Parameters("@Col2").Value = row.Cells(4).Value.ToString
cmd5.Parameters("@Col3").Value = row.Cells(5).Value.ToString
cmd5.Parameters("@Col4").Value = row.Cells(6).Value.ToString
cmd5.Parameters("@Col5").Value = row.Cells(7).Value.ToString
cmd5.Parameters("@Col6").Value = row.Cells(8).Value.ToString
cmd5.Parameters("@Col7").Value = row.Cells(9).Value.ToString
cmd5.Parameters("@Col8").Value =row.Cells(10).Value.ToString
cmd5.Parameters("@Col9").Value =row.Cells(11).Value.ToString
cmd5.Parameters("@Col10").Value=row.Cells(12).Value.ToString
cmd5.Parameters("@Col11").Value=row.Cells(13).Value.ToString
cmd5.Parameters("@Col12").Value=row.Cells(14).Value.ToString
cmd5.Parameters("@Col13").Valu =row.Cells(15).Value.ToString
cmd5.Parameters("@Col14").Valu =row.Cells(16).Value.ToString




cmd5.ExecuteNonQuery()
End If

Next


Catch ex As SqlException
' Display error
Console.WriteLine("Error: " & ex.ToString())
Finally


' Close Connection


MessageBox.Show("enregistré ")
Console.WriteLine("Connection Closed")
End Try
Afficher la suite 

4 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
31
0
Merci
Ton problème vient de là : row.Cells(x).Value.ToString

Si ta cellule est vide, row.Cells(x).Value renvoie Null (à vérifier si c'est Nothing, le null de VB, ou DbNull) et donc tu ne peux pas appliquer la métjode ToString().

Tes paramètres étant déjà typés, essaye sans mettre les ToString à la fin. Sinon il faudra faire le test si chaque cellule est vide avant d'en convertir la valeur en string


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Commenter la réponse de cs_casy
0
Merci
j ai enlevé le to string mais malhreusemen sa ne donne rien ! j ai esseyé de donné une valeur par default dans le grid sans resultat aussi . franchement je sais plus koi faire je suis complétement bloké . aidez moi svp
Commenter la réponse de jerseyshore
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
31
0
Merci
Peut-être un truc du genre (pas sur de la syntaxe)
cmd5.Parameters("@Col1").Value = IIF(row.Cells(3).Value=Nothing,DbNull.Value, row.Cells(3).Value.ToString)



[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Commenter la réponse de cs_casy
0
Merci
malheuresement rien message d'erreur : Un SqlParameter avec ParameterName '@Col3' n'est pas contenu dans ce SqlParameterCollection.
Commenter la réponse de jerseyshore