Accepter valeur NULL comme sql parametre sur vb.net

jerseyshore - 3 mai 2013 à 09:49
 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

4 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
3 mai 2013 à 10:04
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
0
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
3 mai 2013 à 10:35
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
0
malheuresement rien message d'erreur : Un SqlParameter avec ParameterName '@Col3' n'est pas contenu dans ce SqlParameterCollection.
0
Rejoignez-nous