2017-09-28 9 views
0

私は完全な情報とパスポートの写真を表示するためにMySQLデータベースから情報を取得しようとしています。しかし、挑戦があるようです。 Read()の前に無効なエラーが表示され、まだパスポートが表示されません。しかし、それはコンパイル中にエラーを出さない。データベースMysqLからイメージを取得できませんC#

注:行パラメータは、MySQLデータベースのパスポートです。

私のコードは、私はおそらく不足している可能性が何

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using MetroFramework; 
using MySql.Data.MySqlClient; 
using System.IO; 

namespace VisitorManager2 
{ 

    public partial class VisitSignout : MetroFramework.Forms.MetroForm 
    { 

     public VisitSignout() 
     { 

      InitializeComponent(); 
     } 

     private void VisitSignout_Load(object sender, EventArgs e) 
     { 

     } 

     private void metroTextBox9_Click(object sender, EventArgs e) 
     { 

     } 

     private void metroLabel9_Click(object sender, EventArgs e) 
     { 

     } 

/*  private Image getPasport() 
     { 
      string constring = "server=localhost;user id=root;database=vms2"; 
      using (MySqlConnection con = new MySqlConnection(constring)) 
      { 
       string query = "select passport from vms2.vist_db"; 
       MySqlDataAdapter da = new MySqlDataAdapter(query, con); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 
       foreach (DataRow dr in dt.Rows) 
       { 

       } 
      } 

      return img ; 
     }*/ 

     private void metroButton3_Click(object sender, EventArgs e) 
     { 
      string constring = "server=localhost;user id=root;database=vms2"; 
      string query = "select * from visit_db where visitor_name='" + metroTextBox10.Text.Trim() + "'"; 

      using (MySqlConnection con = new MySqlConnection(constring)) 
      { 
       try 
       { 
        DataTable dt = new DataTable(); 
        con.Open(); 
        MySqlDataReader rdr = null; 
        MySqlCommand cmd = new MySqlCommand(query, con); 
        MySqlDataAdapter da = new MySqlDataAdapter(cmd); 
        rdr = cmd.ExecuteReader(); 

        while (rdr.Read()) 
        { 
         metroTextBox1.Text = (rdr["visit_date"].ToString()); 
         metroTextBox2.Text = (rdr["visit_time"].ToString()); 
         metroTextBox3.Text = (rdr["visitor_name"].ToString()); 
         metroTextBox4.Text = (rdr["meeting_employee"].ToString()); 
         metroTextBox5.Text = (rdr["organization"].ToString()); 
         metroTextBox6.Text = (rdr["phone"].ToString()); 
         metroTextBox7.Text = (rdr["visit_type"].ToString()); 
         metroTextBox8.Text = (rdr["department"].ToString()); 

         var ds = new DataSet(); 
         da.Fill(ds, "passport"); 
         int count = ds.Tables["passport"].Rows.Count; 
         if (count > 0) 
         { 
          var data = (Byte[])ds.Tables["passport"].Rows[count - 1]["passport"]; 
          var stream = new MemoryStream(data); 
          pictureBox1.Image = Image.FromStream(stream); 
         } 
        } 

        con.Close(); 
       } 
       catch(Exception ex) 
       { 
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       } 
      } 
     } 
    } 
} 

は次のようになりますか?

+0

完全な例外は何ですか? – Crowcoder

+0

これを取得しますこのConnectionに関連付けられたDataReaderが既に開いていますが、最初に閉じる必要があります。@Crowcoder例外として – Eric

+0

'da.Fill()'を呼び出す前に接続を閉じます。 MySqlプロバイダが複数のアクティブな結果セットをサポートしているかどうかはわかりませんが、それも調べるべきことです。また、パラメータを使用して、テキストボックス値を通じてSQLインジェクションを防止します。 – Crowcoder

答えて

0
private const string connPath = "datasource=localhost;username=root;password='';database=lms;"; 
    public MySqlConnection MyConn = new MySqlConnection(connPath); 
    public DataTable selectQuery(string query) 
    { 
     DataTable dTable = new DataTable(); 
     try 
     {     
      MySqlCommand MyCommand = new MySqlCommand(query, MyConn); 
      MySqlDataAdapter MyAdapter = new MySqlDataAdapter(); 
      MyAdapter.SelectCommand = MyCommand; 
      MyAdapter.Fill(dTable); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message.ToString()); 
     } 
     return dTable; 
    } 

DataTable mem = selectQuery("SELECT image FROM `mem_det` WHERE Member_id=1"); 
     int count = mem.Rows.Count; 
     if (count > 0) 
     { 
      var data = (Byte[])(mem.Rows[count - 1]["image"]); 
      var stream = new MemoryStream(data); 
      memberImage.Image = Image.FromStream(stream); 
     } 
+0

This Worked! ImageBoxに100%収まるように画像のサイズを変更するにはどうすればいいですか?おかげで – Eric

+0

pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;私にとっては、ありがとうございました。とてもありがたい。 – Eric

関連する問題