2016-04-12 5 views
0

画像をアップロードすると、その画像でハッシュも生成されますが、画像はデータベースに保存されますが、問題はどのようにしてdatabase.Belowにハッシュを格納できますか?Image 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(); 
       } 
      } 

     } 

私はこの問題を解決することができ、現在のcontext.howに存在しない、それは私にerror.hashを与えるImageHash(ハッシュ)関数SaveRecord()関数を呼び出します。

+1

コードは正しいですか? 'ImageHash()'は何もせず、宣言されていない変数 'hash'を使用している' SaveRecord() 'では、コンパイルエラーが発生します。計算後、 'string hash = ComputeHashCode(imgBytes)'で何もしません。おそらく 'imgbytes'と' hash'を 'SaveRecord()'関数に渡し、 'FirstpictureBox_Click()'で呼び出すべきでしょうか? –

+1

はい、あなたは変数 'hash'を使用しようとしていますが、宣言していません。あなたはその変数がどこから来ると思いますか?おそらくあなたはそれをパラメータとして追加したいでしょうか?それを取得するために 'ComputeHashCode'メソッドを呼び出しますか?この質問にはハッシュ固有のものは何もありません... –

答えて

1

hash変数をクラスレベルで宣言してください(つまり、関数またはメソッドの外側にある)。

今のところ、関数/メソッドレベルで文字列を宣言しています。つまり、FirstpictureBox_Click()にアクセスできるだけです。宣言をメソッドから外すだけで、あなたは良いことになります。

string hash; 

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

@StackOverflow:どういう意味ですか?このようにすると、現在のクラスのどのメソッドからでも変数にアクセスできるようになります。他のものを変更する必要はありません。 –

+0

@StackOverflow:既にデータベースにハッシュを書き込んでいるので、探しているのは何ですか? –

関連する問題