2012-05-04 46 views
9

Tôi đang cố tải hình ảnh từ cơ sở dữ liệu lên PictureBox. Tôi sử dụng các mã sau đây để tải chúng vào ảnh của tôi. Tôi đã viết một số mã nhưng không biết tôi nên làm gì để tiếp tục.Đang tải PictureBox Hình ảnh Từ Cơ sở dữ liệu

Mọi trợ giúp sẽ được đánh giá cao.

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)); 
    } 

Trả lời

13

Tiếp tục với một cái gì đó như thế này trong 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

Cảm ơn bạn rất nhiều. nó đã làm việc. – aliprogrammer

+0

Trong cơ sở dữ liệu của tôi, tôi đánh dấu là cho phép null cho cột Hình ảnh. nhưng khi tôi sử dụng các mã này nếu không có hình ảnh trong hàng tôi sẽ gặp lỗi – aliprogrammer

+0

@aliprogrammer: Đó là khá nhiều câu trả lời tôi đã đăng trong url trước đó (xem mẫu số 7 trong tham chiếu) – GoRoS

2

Giả sử chúng ta có một cơ sở dữ liệu đơn giản với một bảng gọi là BLOBTest:

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

Chúng ta có thể lấy lại hình ảnh mã theo cách sau:

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);} 

Mã này lấy hàng từ bảng BLOBTest trong cơ sở dữ liệu vào DataSet, sao chép hình ảnh được thêm gần đây nhất vào mảng Byte và sau đó vào đối tượng MemoryStream và sau đó tải MemoryStream vào thuộc tính Image của điều khiển PictureBox.

hướng dẫn tham khảo đầy đủ:

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

+0

Trong khi liên kết này có thể trả lời câu hỏi, nó là tốt hơn để bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. –

+0

@ChrisHaas bạn hoàn toàn đúng, tôi đã cập nhật câu trả lời. – 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); 
    } 
} 
Các vấn đề liên quan