2013-07-04 7 views
0

Je souhaite récupérer les données de la base de données. Quand je modifie mon code pour l'image son paramètre d'affichage n'est pas valide.Paramètre non valide

private void button7_Click(object sender, EventArgs e) 
{   
    ProductDetails.Items.Clear(); 
    SqlConnection con = new SqlConnection(@"server=xxx-PC; database= sample; integrated security= true"); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("select * from tblproduct where prodname like '" + textBox1.Text + "%';", con); 
    SqlDataReader dr = cmd.ExecuteReader(); 
    while (dr.Read()) 
    { 
     byte[]imgg =(byte[])(dr["image"]); 
     if(imgg==null) 
      pictureBox1.Image= null; 
     else 
     {     //i m not getting error it says parameter not valid below// 
      MemoryStream mstream = new MemoryStream(imgg); 
      pictureBox1.Image = System.Drawing.Image.FromStream(mstream); 
     } 

     ProductDetails.Items.Add(dr[0].ToString() + " \t" + dr[1].ToString() + "\t" + dr[2].ToString()+ dr[3].ToString());    
    } 
} 

AJOUTÉE de OP de Commentaire

pour le chargement i utiliser ce code

byte[] imagebt = null; 
FileStream fstream = new FileStream(this.textBox5.Text, FileMode.Open, FileAccess.Read); 
BinaryReader br = new BinaryReader(fstream); 
imagebt = br.ReadBytes((int)fstream.Length); 
+5

Quelle ligne L'erreur se produit sur? – Tim

+5

vous devriez vraiment jeter un coup d'oeil à [sqlParameter] (http://msdn.microsoft.com/fr-ca/library/system.data.sqlclient.sqlparameter%28v=vs.110%29.aspx). Votre code est faible à [Injection sql] (http://en.wikipedia.org/wiki/SQL_injection) –

+2

Possible dupliquer http://stackoverflow.com/questions/629955/parameter-not-valid-exception-loading-system -drawing-image erreur –

Répondre

0

S'il vous plaît laissez-moi savoir si cela fonctionne:

private void button7_Click(object sender, EventArgs e) 
{   
    ProductDetails.Items.Clear(); 
    SqlConnection con = new SqlConnection(@"server=xxx-PC; database= sample; integrated security= true"); 

    SqlCommand cmd = new SqlCommand("select * from tblproduct where prodname like @name;", con); 
    cmd.Parameters.AddWithValue(textBox1.Text.Trim() + "%"); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataTable  dt = new DataTable(); 
    try 
    { 
     con.Open(); 
     da.Fill(dt); 
    } 
    catch (Exception e) 
    { //exception handling here } 
    finally { con.Close(); } 

    foreach(DataRow dr in dt.Rows) 
    { 
     byte[]imgg =(byte[])dr["image"]; 
     if(imgg==null || imgg.length <= 0) 
      pictureBox1.Image= null; 
     else 
     { 
      pictureBox1.Image = ByteToImage(imgg); 
     } 

     ProductDetails.Items.Add(dr[0].ToString() + " \t" + 
      dr[1].ToString() + "\t" + 
      dr[2].ToString() + 
      dr[3].ToString());    
    } 
} 

// https://stackoverflow.com/questions/9576868/how-to-put-image-in-a-picture-box-from-a-byte-in-c-sharp 
public static Bitmap ByteToImage(byte[] blob) 
{ 
    MemoryStream mStream = new MemoryStream(); 
    byte[] pData = blob; 
    mStream.Write(pData, 0, Convert.ToInt32(pData.Length)); 
    Bitmap bm = new Bitmap(mStream, false); 
    mStream.Dispose(); 
    return bm; 
} 

Vous pouvez également utiliser un using bloc avec le SqlConnection comme au this SO question. Veuillez également noter qu'il est préférable de pas d'utiliser Select * from ... mais nommez les colonnes. Vous pouvez en lire davantage sur ces liens:

+0

Non ce n'est pas en me donnant la sortie ni l'erreur – pooja

+1

@pooja Vous n'êtes pas assez précis pour permettre aux gens de vous aider. Vous avez été demandé deux fois maintenant, "Sur quelle ligne l'erreur se produit-elle?", Et vous n'avez toujours pas donné de réponse. Donc, veuillez modifier votre question pour inclure à la fois la ligne exacte qui cause l'erreur et aussi ** le message d'erreur exact ** que vous obtenez. –

+0

erreur: connexion non fermée – pooja

Questions connexes