2011-05-11 3 views
1

Je ne suis pas en mesure d'insérer l'image dans la base de données.Ceci est mon exemple de code.Il est capable de sélectionner une image de mon ordinateur et l'afficher dans la boîte d'image.Une fois j'essaie de stocker l'image affichée Dans la zone d'image de la base de données, il est indiqué que la référence d'objet n'est pas définie sur une instance d'un objet.C# stocker une image à la base de données

Ceci est mon exemple de code.

  namespace picutre_storage 
    { 
     public partial class Form1 : Form 
     { 
     public Form1() 
     { 
     InitializeComponent(); 
     } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     try 
     { 

      SqlConnection con = new SqlConnection 
          (@"User ID=sa;Password=password123;Initial Catalog=picuture;Persist Security Info=True;Data Source=ENMEDIA-EA6278E\ENMEDIA"); 
      //I have used a table named "tblUsers" and fill the fields 
      SqlCommand cmd = new SqlCommand("INSERT INTO BLOBTest (BLOBData) VALUES (@BLOBData)", con); 

      //Save image from PictureBox into MemoryStream object. 
      MemoryStream ms = new MemoryStream(); 
      pictureBox1.Image.Save(ms,ImageFormat.Bmp); 

      //Read from MemoryStream into Byte array. 
      Byte[] bytBLOBData = new Byte[ms.Length]; 
      ms.Position = 0; 
      ms.Read(bytBLOBData, 0, Convert.ToInt32(ms.Length)); 

      //Create parameter for insert statement that contains image. 
      SqlParameter prm = new SqlParameter("@BLOBData", SqlDbType.VarBinary,   bytBLOBData.Length, ParameterDirection.Input, false, 
          0, 0, null, DataRowVersion.Current, bytBLOBData); 
      cmd.Parameters.Add(prm); 
      con.Open(); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
     } 
     catch (Exception ex) 
     { MessageBox.Show(""+ex); } 
    } 

     private void button3_Click(object sender, EventArgs e) 
     { 
     try 
     { 
      //Getting The Image From The System 
      OpenFileDialog open = new OpenFileDialog(); 
      open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp"; 
      if (open.ShowDialog() == DialogResult.OK) 
      { 
       pictureBox2.Image = new Bitmap(open.FileName); 
      } 
     } 
     catch (Exception) 
     { 
      throw new ApplicationException("Failed loading image"); 
     } 
    } 

est 2.There aucune façon de vérifier la taille de l'image avant de l'afficher dans l'image box.Thank à l'avance

+0

Pour le point 2:. Je sauve dans une colonne de ma db même longueur d'image je sauve. – Marco

+2

Toujours envelopper votre objet SqlConnection dans une instruction using ou bien vous aurez une fuite de pool de connexion :) :) using (var cnn = new SqlConnection (...)) {....} (dans le cas de votre code ci-dessus - vous rencontrerez des problèmes dès qu'une erreur se produira - votre connexion ne sera pas fermée) – Nathan

+1

vous pouvez obtenir le tableau d'octets avec ms.ToArray(). Pas besoin de faire une allocation manuelle. –

Répondre

1

Sur ce que je vois que vous enregistrez un fichier au format bmp et à l'origine cette image existe avec disons le format jpeg ou tiff, donc l'enregistrement est correctement inséré mais l'image se réfère à un format de type bmp et n'existe pas. Je pense que vous pouvez faire quelque chose comme ça.

  1. lorsque vous obtenez l'image dans un format vous voulez, puis créer une vignette pour ce magasin de photo dans un autre dossier * (comme My Pictures \ Thumbnails). *
  2. Obtenez l'extension de l'image , remplacez-la par jpg pendant création de Thumbnail.
  3. Stockez cela dans la base de données. Récupérer les vignettes dans la boîte à image . Tu veux.

Si vous voulez savoir comment créer les vignettes (enregistrement d'un fichier au format JPG puis les bienvenus

Questions connexes