2012-04-13 6 views
1

MySQL 데이터베이스에서 /로 이미지를 저장하고 복원해야합니다. 이를 위해 나는이 페이지에서 제공하는 지침을 사용 : MySQL Forum를, 그리고 성공적으로 다음 코드를 통해 이미지를 저장할 수 있습니다 :MySQL 데이터베이스에서 이미지 가져 오기 - C#

SaveIamge :

void SaveImage() 
    { 
     MemoryStream ms = new MemoryStream(); 
     pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
     cmd = new MySqlCommand("INSERT INTO " + tableName + " (Product, Manufacturer, Description, Price, Image) Values ('New_Product', 'New_Manufacturer', 'New_Description', '0', @Image)", conn); 
     cmd.Parameters.Add(new MySqlParameter("@Image", Convert.ToBase64String(ms.ToArray()))); 
     cmd.ExecuteNonQuery(); 
    } 

하지만 데이터베이스에서 이미지되지 수 : I

의 getThumbnail :

01 다음 코드를 사용하고, 여기에 잘못이 무엇인지 확인하세요
+0

당신은 디버깅 할 수 있습니다와'imgObj'가 있는지 뭐가? –

답변

5

어떻게 이진 필드에 이미지를 저장하나요?

using (var ms = new MemoryStream()) 
{ 
    pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
    SaveImage(ms.ToArray()); 
} 

을하고, 검색하고자 할 때 : 다음

void SaveImage(byte[] image) 
{ 
    using (var conn = new MySqlConnection(ConnectionString)) 
    using (var cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = "INSERT INTO pictures (Product, Manufacturer, Description, Price, Image) VALUES ('New_Product', 'New_Manufacturer', 'New_Description', '0', ?Image)"; 
     cmd.Parameters.Add("?Image", image); 
     cmd.ExecuteNonQuery();  
    } 
} 

byte[] GetImage(string product) 
{ 
    using (var conn = new MySqlConnection(ConnectionString)) 
    using (var cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = "SELECT Image FROM pictures WHERE Product = ?product"; 
     cmd.Parameters.Add("?product", product); 
     using (var reader = cmd.ExecuteReader()) 
     { 
      if (!reader.Read()) 
      { 
       return null; 
      } 

      const int CHUNK_SIZE = 2 * 1024; 
      byte[] buffer = new byte[CHUNK_SIZE]; 
      long bytesRead; 
      long fieldOffset = 0; 
      using (var stream = new MemoryStream()) 
      { 
       while ((bytesRead = reader.GetBytes(reader.GetOrdinal("Image"), fieldOffset, buffer, 0, buffer.Length)) > 0) 
       { 
        stream.Write(buffer, 0, (int)bytesRead); 
        fieldOffset += bytesRead; 
       } 
       return stream.ToArray(); 
      } 
     } 
    } 
} 

를 실행 한 다음, 그것을 인코딩 Base64로보다 더 나을

byte[] image = GetImage("New_Product"); 
MemoryStream stream = new MemoryStream(image); 
pictureBox2.Image = Image.FromStream(ms); 
+0

코드를 시도했지만 여전히 작동하지 않습니다. –

+0

이 줄을 바꿀 때만 작동합니다. while ((bytesRead = reader.GetBytes (reader.GetOrdinal ("Image"), fieldOffset, buffer, 0, buffer.Length))> 0)'this with 'while ((bytesRead = reader.GetBytes (reader.GetOrdinal ("Image"), fieldOffset, buffer, 0, buffer.Length)) == buffer.Length)' –

관련 문제