2012-05-04 2 views
9

Я пытаюсь загрузить изображения из базы данных в PictureBox. Я использую эти следующие коды, чтобы загрузить их на мое изображение. Я написал код, но не знаю, что я должен сделать для продолжения.Загрузка PictureBox Изображение из базы данных

Любая помощь будет оценена по достоинству.

private void button1_Click(object sender, EventArgs e) 
    { 
     sql = new SqlConnection(@"Data Source=PC-PC\PC;Initial Catalog=Test;Integrated Security=True"); 
     cmd = new SqlCommand(); 
     cmd.Connection = sql; 
     cmd.CommandText = ("select Image from Entry where EntryID [email protected]"); 
     cmd.Parameters.AddWithValue("@EntryID", Convert.ToInt32(textBox1.Text)); 
    } 

ответ

13

Продолжить с чем-то вроде этого в button1_Click:

// Your code first, here. 

var da = new SqlDataAdapter(cmd); 
var ds = new DataSet(); 
da.Fill(ds, "Images"); 
int count = ds.Tables["Images"].Rows.Count; 

if (count > 0) 
{ 
    var data = (Byte[])ds.Tables["Images"].Rows[count - 1]["Image"]; 
    var stream = new MemoryStream(data); 
    pictureBox1.Image = Image.FromStream(stream); 
} 
+0

Большое вам спасибо. это сработало. – aliprogrammer

+0

В моей базе данных я отмечен как allow nulls для столбца Image. но когда я использую эти коды, если в строке нет изображения, я столкнусь с ошибкой – aliprogrammer

+0

@aliprogrammer: Это почти тот же ответ, который я опубликовал в URL-адресе раньше (см. пример № 7 в ссылке) – GoRoS

2

Предполагая, что у нас есть простая база данных с таблицей называется BLOBTest:

CREATE TABLE BLOBTest 
(
BLOBID INT IDENTITY NOT NULL, 
BLOBData IMAGE NOT NULL 
) 

Мы могли бы восстановить изображение, чтобы закодировать следующим образом:

try 
{ 
    SqlConnection cn = new SqlConnection(strCn); 
    cn.Open(); 

    //Retrieve BLOB from database into DataSet. 
    SqlCommand cmd = new SqlCommand("SELECT BLOBID, BLOBData FROM BLOBTest ORDER BY BLOBID", cn); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds, "BLOBTest"); 
    int c = ds.Tables["BLOBTest"].Rows.Count; 

    if(c>0) 
    { //BLOB is read into Byte array, then used to construct MemoryStream, 
     //then passed to PictureBox. 
     Byte[] byteBLOBData = new Byte[0]; 
     byteBLOBData = (Byte[])(ds.Tables["BLOBTest"].Rows[c - 1]["BLOBData"]); 
     MemoryStream stmBLOBData = new MemoryStream(byteBLOBData); 
     pictureBox1.Image= Image.FromStream(stmBLOBData); 
    } 
    cn.Close(); 
} 
catch(Exception ex) 
{MessageBox.Show(ex.Message);} 

Этот код извлекает строки из таблицы BLOBTest в базе данных в DataSet, копирует последнее добавленное изображение в массив Byte, а затем в объект MemoryStream, а затем загружает MemoryStream в свойство Image элемента управления PictureBox.

Полный справочник:

http://support.microsoft.com/kb/317701

+0

Хотя эта ссылка может ответить на вопрос, что лучше включить основные части ответа здесь и укажите ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. –

+0

@ChrisHaas вы абсолютно правы, я обновил ответ. – GoRoS

0
private void btnShowImage_Click(object sender, EventArgs e) 
{ 
    string constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\\PIS(ACU).mdb;"; 
    Con = new OleDbConnection(@constr); 
    Con.Open(); 
    Com = new OleDbCommand(); 
    Com.Connection = Con;  
    Com.CommandText = "SELECT Photo FROM PatientImages WHERE Patient_Id = " + val + " "; 
    OleDbDataReader reader = Com.ExecuteReader(); 
    if (reader.Read()) 
    { 
     byte[] picbyte = reader["Photo"] as byte[] ?? null; 
     if (picbyte != null) 
     { 
      MemoryStream mstream = new MemoryStream(picbyte); 
      pictureBoxForImage.Image = System.Drawing.Image.FromStream(mstream); 
     { 
     System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(mstream); 
    } 
}