Veuillez pardonner mes connaissances sur C # car je suis très nouveau dans ce domaine, je suis incapable d'insérer un enregistrement en SQL et d'obtenir l'erreur ci-dessous lors de l'insertion d'une image dans SQL. Erreur:
La référence d'objet n'est pas définie sur une instance d'un objet.
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] img = ms.ToArray();
if (img == null)
{
com.Parameters.AddWithValue("@img", null);
}
else
{
com.Parameters.AddWithValue("@img", img);
}
Si je sélectionne une image et l'insère avec succès, mais si je ne sélectionne pas une image, l'erreur ci-dessus est générée. S'il vous plaît aider !!
3 Réponses :
Modifiez ceci:
MemoryStream ms = new MemoryStream();
pictureBox1?.Image?.Save(ms, pictureBox1?.Image?.RawFormat);
byte[] img = ms.ToArray();
com.Parameters.AddWithValue("@img", (object)img ?? DBNull.Value);
À ceci
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] img = ms.ToArray();
if (img == null)
{
com.Parameters.AddWithValue("@img", null);
}
else
{
com.Parameters.AddWithValue("@img", img);
}
L'erreur dit l'opérateur ?? ne peut pas être appliqué aux opérandes de type byte []
Fonctionne-t-il avec com.Parameters.AddWithValue ("@ img", img);
Essayez de tester que PictureBox1.Image existe avant de la référencer, comme ceci:
if (pictureBox1.Image != null)
{
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] img = ms.ToArray();
com.Parameters.AddWithValue("@img", img);
}
else
{
com.Parameters.Add("@img", SqlDbType.VarBinary, 0).Value = DbNull.Value;
}
MODIFIÉ pour inclure le commentaire de GarethD
com.Parameters.AddWithValue ("@ img", null); lancera toujours une erreur, il serait préférable de déclarer explicitement le type de paramètre, par exemple com.Parameters.Add ("@ img", SqlDbType.VarBinary, 0) .Value = DbNull.Value; ou com.Parameters.Add ("@ img", SqlDbType.VarBinary, 0) .Value = img; (selon le côté du si vous vous trouvez)
Merci, @GarethD. J'ai mis à jour ma réponse en conséquence
Superbe cela fonctionne !! Merci à tous ... beaucoup apprécié pour toute l'aide.
Tout d'abord, vous devez créer une nouvelle condition pour vérifier si le fichier est sélectionné ou non. Voici le code ci-dessous:
if pictureBox1.hasfile == true
{
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] img = ms.ToArray();
if (img == null)
{
com.Parameters.AddWithValue("@img", null);
}
else
{
com.Parameters.AddWithValue("@img", img);
}
}
car vous ne sélectionnez aucun fichier, c'est pourquoi il lance une exception à l'exécution
dans quelle ligne avez-vous l'exception NullReferenceException? et pourquoi êtes-vous si sûr que votre pictureBox1 a une image, et que cette image a un RawFormat? avez-vous vérifié cela quelque part ci-dessus dans le code?
AddWithValuedoit déduire le type de paramètre en fonction de la valeur passée. Puisque vous passeznull, il ne peut pas déduire le type de paramètre et génère une erreur. La meilleure solution est de ne pas utiliserAddWithValueet de saisir explicitement votre paramètre. Plus de lecture: Pouvons-nous arrêter d'utiliser AddWithValue () déjà? , AddWithValue is EvilLe message d'exception indique qu'il est lié au code c #, de sorte que l'exception peut se produire ici:
pictureBox1.Image.Save (ms, pictureBox1.Image.RawFormat);lorsque pictureBox1.Image est nul@GarethD Oui, il ne doit pas être utilisé, et oui, il génère une erreur mais pas un NRE. C'est une requête paramétrée attend .....
@Steve, assez juste, j'ai fait une hypothèse sans vérification, je suis corrigé et l'utilisation de
AddWithValuen'est pas la cause de l'exception lancée. Je m'attendrais maintenant à ce que la ligne de problème soit ici alors:pictureBox1.Image.Save (ms, pictureBox1.Image.RawFormat);, si vous ne sélectionnez pas une image,pictureBox.Imagesera nul, ce qui signifie que vous ne pouvez pas appeler la méthodeSave ()sur l'image.Est-ce que cela répond à votre question? Qu'est-ce qu'une exception NullReferenceException et comment y remédier?