2016-04-12 21 views
0

Bir resim karesi yüklediğimde bu görüntü ile de oluşturulmuş görüntü bende db depolamak ama problem nasıl karma veritabanında saklayabilirim.Önemli kodum.Resim Hash ekleme C#

private void FirstpictureBox_Click(object sender, EventArgs e) 
     { 
     OpenFileDialog ofd = new OpenFileDialog(); 
     ofd.Title = "Select First Image"; 
     ofd.Filter = "Image File(*.png;*.jpg;*.bmp;*.gif)|*.png;*.jpg;*.bmp;*.gif"; 
     if (ofd.ShowDialog() == DialogResult.OK) 
      { 
      FirstpictureBox.Image = new Bitmap(ofd.FileName); 
      byte[] imgBytes = new byte[0]; 

      //convert image to byte array 
      imgBytes = (byte[])converter.ConvertTo(FirstpictureBox.Image, imgBytes.GetType()); 

      //compute SHA hash string from image bytes 
      string hash = ComputeHashCode(imgBytes); 
      } 
     } 
private string ComputeHashCode(byte[] imgBytes) 
    { 
     //Compute hash bytes 
     byte[] hash = shaEncryptor.ComputeHash(imgBytes); 

     //Convert hash bytes to string representation 
     return Convert.ToBase64String(hash); 

    } 

    public void ImageHash(string hash) 
    { 

    } 
private void SaveRecord() 
     { 
      ImageHash(hash); 
     string connString = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString; 
     string cmdString = "INSERT INTO users (img1,hash) VALUES (@firstimage,@hash)"; 
     using (OleDbConnection con = new OleDbConnection(connString)) 
      { 
      using (OleDbCommand cmd = new OleDbCommand(cmdString, con)) 
       { 
       con.Open(); 
       cmd.Parameters.AddWithValue("@firstimage", savePhoto()); 
       cmd.Parameters.AddWithValue("@hash", hash); 
       cmd.ExecuteNonQuery(); 
       } 
      } 

     } 

i SaveRecord içinde (hash) işlevi ImageHash çağırdığınızda() fonksiyonu bu bana ben bu sorunu çözebilirsiniz cari context.how var olmayan bir error.hash verir.

+1

Kod doğru mu? 'ImageHash()' hiçbir şey yapmaz ve 'SaveRecord()' kayıtsız bir değişken 'karma 'kullanırsınız, derleme hatası buradan gelir. Hesaplamadan sonra 'string hash = ComputeHashCode (imgBytes)' ile hiçbir şey yapmazsınız. Belki 'imgbytes' ve' hash' '' SaveRecord() 'fonksiyonuna geçmeli ve' FirstpictureBox_Click() 'olarak adlandırmalısınız? –

+1

Evet, bir "hash" değişkeni kullanmaya çalışıyorsunuz, ancak bunu bildirmediniz. Bu değişkenin nereden geleceğini düşünüyorsunuz? Belki de onu parametre olarak eklemek istersiniz? Bunu elde etmek için 'ComputeHashCode' yöntemini çağırın. Bu soruya gerçekten hash bir şey yok ... –

cevap

1

hash değişkeninizi sınıf düzeyinde (yani, herhangi bir işlev veya yöntem dışında) bildirin.

Şimdi olduğu gibi, dizeyi işlev/yöntem düzeyinde bildirdiniz, bu da yalnızca FirstpictureBox_Click()'un buna erişebileceği anlamına gelir. Beyanı sadece yöntemden uzaklaştırın ve gitmekte fayda var.

string hash; 

private void FirstpictureBox_Click(object sender, EventArgs e) 
{ 
    ...your code... 
    hash = ComputeHashCode(imgBytes); 
} 
+0

@StackOverflow: Ne demek istiyorsun? Bunu yapmak, değişkeninizin geçerli sınıftaki herhangi bir yöntemden erişilebilir olmasını sağlar, başka herhangi bir şeyi değiştirmek zorunda kalmazsınız. –

+0

@StackOverflow: Yazdığınız kod veritabanına yazıyormuş gibi görünüyor, bu yüzden aradığınız nedir? –