2013-04-09 67 views
0

我正在从数据库提取图像(SQL Server 2008) 我正在使用WPF应用程序,使用Grid_Loaded事件加载页面。 我发现的例子主要是使用组合框来选择图像的ID并显示它。但是我不想使用组合框。通过数据库提取图像

我有几行代码,我曾在互联网上找到过,如果有人帮助我,我将不胜感激!

private void LoadImages() 
    { 
     try 
     { 

      string connstr = @"Server=CTGPJLPC21\SQLEXPRESS;Database=testing;Trusted_Connection=True;"; 
      using (SqlConnection conn = new SqlConnection(connstr)) 
      { 
       conn.Open(); 
       using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM test_table", conn)) 
       { 
        dset = new DataSet(); 
        adapter.Fill(dset); 
       } 
       DataTable dt = dset.Tables[0]; 
       foreach (DataRow row in dt.Rows) 
       { 
        if (dset.Tables[0].Rows.Count == 1) 
        { 
         byte[] data = (byte[])dset.Tables[0].Rows[0][0]; 

         MemoryStream strm = new MemoryStream(); 

         strm.Write(data, 0, data.Length); 

         strm.Position = 0; 

         System.Drawing.Image img = System.Drawing.Image.FromStream(strm); 

         BitmapImage bi = new BitmapImage(); 

         bi.BeginInit(); 

         MemoryStream ms = new MemoryStream(); 

         img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); 

         ms.Seek(0, SeekOrigin.Begin); 

         bi.StreamSource = ms; 

         bi.EndInit(); 

         myImg.Source = bi; 
        } 
       } 
       } 
     } 
     catch (Exception ex) 
     { 

      MessageBox.Show(ex.Message); 

     } 
    } 

回答

0
long bufferSize = dataReader.IsDBNull(1) ? 0 : dataReader.GetInt64(1); 
if (bufferSize > 0) 
{ 
    j.PictureContent = new byte[bufferSize]; 
    bufferSize = dataReader.GetBytes(1, 0, j.PictureContent, 0, Convert.ToInt32(bufferSize)); 
} 



其中J是一个类的实例和j.PictureContent是一个字节[]。