Erreur de casting to byte

lolo70000 Messages postés 8 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 20 juin 2006 - 15 juin 2006 à 12:23
dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 - 15 juin 2006 à 13:44
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

bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
15 juin 2006 à 12:27
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
0
lolo70000 Messages postés 8 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 20 juin 2006
15 juin 2006 à 13:24
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
0
dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
15 juin 2006 à 13:44
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.
0
Rejoignez-nous