2010-08-26 2 views
0

Je suis enregistrement d'une image dans la base de données avec byte[] propriété comme ceci:Comment convertir.ToByte [] lecteur sql?

ProfileModel:

private byte[] _imageData; 

public byte[] ImageData 
{ 
    get 
    { 
     return _imageData; 
    } 
    set 
    { 
     _imageData = value; 
    } 
} 

Quand je suis en train de lire l'image que j'ai problème avec la conversion de l'octet. Je ne sais pas comment convertir le lecteur en byte[]. Je pensais que c'est assez pour convertir.ToByte, mais ça ne marche pas.

ThreadModel:

private byte _imageData; 
public byte ImageData 
{ 
    get 
    { 
     return _imageData; 
    } 
    set 
    { 
     _imageData = value; 
    } 
} 

Sa ma méthode où je suis en train de lire des informations d'image:

cmd = new SqlCommand(); 
cmd.Connection = connection; 
cmd.CommandType = System.Data.CommandType.Text; 
cmd.CommandText = @"SELECT ImageData, " 
       + " ContentType, " 
       + " ImageName " 
       + " FROM UsersImage " 
       + " WHERE UserName = @UserName "; 

cmd.Parameters.AddWithValue("@UserName", ThreadUserName); 

reader = cmd.ExecuteReader(); 
if (reader.Read()) 
{ 
    if (reader["ContentType"] != DBNull.Value) 
    { 
     ContentType = Convert.ToString(reader["ContentType"]); 
    } 

    if (reader["ImageName"] != DBNull.Value) 
    { 
     ImageName = Convert.ToString(reader["ImageName"]); 
    } 

    if (reader["ImageData"] != DBNull.Value) 
    { 
     ImageData = Convert.ToByte(reader["ImageData"]); 
    } 

    int affectedRows = cmd.ExecuteNonQuery(); 
    if (affectedRows != 1) 
    { 

    } 
} 
reader.Close(); 

Répondre

1
byte[] buffer = new byte[reader.GetBytes(reader.GetOrdinal("ImageData"), 0, null, 0, int.MaxValue)]; 
reader.GetBytes(reader.GetOrdinal("ImageData"), 0, buffer, 0, int.MaxValue); 

pourrait fonctionner, non testé cependant.

+0

Je dois juste faire cela à et, ou? ImageData = lecteur.GetBytes (lecteur.GetOrdinal ("ImageData"), 0, buffer, 0, int.MaxValue); –

+0

Non, vous devez ajouter "ImageData = buffer;", reader.GetBytes (...) renvoie le nombre d'octets écrits dans "buffer". –

+0

oui, mais mon ImageData est de type octet adn tampon est encore de byte []. alors c'est toujours le même problème que précédemment. –

Questions connexes