Erreur de casting to byte

Signaler
Messages postés
8
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
20 juin 2006
-
Messages postés
129
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
-
Bonjour tt le monde !!!

alors je veux recuperer une image  apartir de ma base de donnee : voici mo code :

Connexion

cnx =
new
Connexion(); 

MemoryStream stream =
new
MemoryStream();

cnx.getConnexion().Open();

SqlCommand command =
new
SqlCommand(
"select image from annonces_ventes_encheres where id = 1", cnx.getConnexion());

try{

byte[] image=(
byte[])command.ExecuteScalar();

stream.Write(image, 0, image.Length);

Bitmap bitmap =
new
Bitmap(stream);Response.ContentType =

"image/gif";DGI.Image.Save(Response.OutputStream,

ImageFormat.Gif);}

catch (System.Data.SqlClient.
SqlException SQL){

Response.Write(SQL.ToString());

}

finally{

cnx.getConnexion().Close();

stream.Close();

}

mais quan j'excute mon code il me genere l'exception suivante :

Unable to cast object of type 'System.DBNull' to type 'System.Byte[]'.
A voir également:

3 réponses

Messages postés
427
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
29 janvier 2008
1
Unable to cast object of type 'System.DBNull' to type 'System.Byte[]'.  tout est dans ton erreur

la requete te renvoie null ... donc le cast est impossible
Messages postés
8
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
20 juin 2006

Non jai verifier et jai ajouter une ligne pr verifier s i c null ou pas voila :
Object

OBJ = command.ExecuteScalar();

if ( OBJ!=
null) {

byte[] image1 = (
byte[])(command.ExecuteScalar());}
jai debeguee et a ma grande surprise il est rentre ds le bloque de if cad que logjet nest pas null  

masi il genere tjrs la meme exception

aidez moi SOS
Messages postés
129
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
3
Bonjour lolo70000,

À mon avis, il ne faut pas tester si la valeur de retour de ExecuteScalar() est non-nulle (avec OBJ != null) mais si c'est un objet de type DBNull (avec OBJ is System.DBNull).

En effet, DBNull est un type spécialement conçu pour représenter l'absence de données dans une base de données. Donc si ta requête ne trouve rien, elle renvoie un objet DBNull, ce qui explique d'une part pourquoi le test (OBJ != null) est vrai (car OBJ contient une valeur, de type DBNull) ; et d'autre part, pourquoi le cast en byte[] n'est pas possible.