2015-10-09 5 views
4

У меня есть следующий код.Как показать изображение в окне изображения из базы данных?

foreach (DataRow dr1 in dt.Rows) 
{ 
    picbyte = (byte[])dr1["AssociateImageData"]; 
    Stream stream = new MemoryStream(picbyte); 
    pictureBox1.Image =Image.FromStream(stream,true,true); 
} 
+0

У меня есть ошибка «Параметр не действителен» –

+0

где вы получаете эту ошибку? Вы пытались отлаживать? –

+2

Почему вы передаете «true, true» методу, а не только байту []? Я не думаю, что эта перегрузка существует. – CRice

ответ

1

Попробуйте так:

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

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

sir im, используя таблицу данных, так как я могу получить данные из набора данных. –

+0

@pramodnarke: - Вы пытались изменить: 'pictureBox1.Image = Image.FromStream (stream);' –

+0

sir Мне нужно загрузить изображение в сам файл изображения , и при отладке свойства Image имеет значение null в pictureBox1.Image = Image.FromStream (поток); –

1

Попробуйте, это работает для меня:

private void viewSnapShotButton_Click(object sender, EventArgs e) 
{ 
    this.Cursor = Cursors.WaitCursor; 
    string connectionString = ConfigurationManager.AppSettings["myCconnectionSstring"]; 

    string queryString = ConfigurationManager.AppSettings["MyQueryString"]; 
    MemoryStream stream = new MemoryStream(); 
    SqlConnection connection = new SqlConnection(connectionString); 
    try 
    { 
     connection.Open(); 
     SqlCommand command = new SqlCommand(queryString, connection); 
     byte[] image = (byte[])command.ExecuteScalar(); 
     MemoryStream ms1 = new MemoryStream(image); 
     exceptionPictureBox.Image = Bitmap.FromStream(ms1); //this is how it should be. I was using Image.FromStream and was getting error. 
    } 
    finally 
    { 
     connection.Close(); 
     stream.Close(); 
    } 
    this.Cursor = Cursors.Default; 
} 
+0

, какой тип данных должен использоваться для изображения хранилища в SQL-сервере .... могу ли я использовать изображение или varbinary (max) для того же –

+0

'Image' устарел, поэтому используйте' Varbinary'. – Bauss

0
foreach (DataRow dr1 in dt.Rows) 
{ 
    picbyte = (byte[])dr1["AssociateImageData"]; 
    MemoryStream ms1 = new MemoryStream(picbyte); 
    pictureBox1.Image = Bitmap.FromStream (ms1); 
} 
0

Это, вероятно, самое чистое решение, где память фактически очищается должным образом ,

using (var conn = new SqlConnection(connectionString)) 
{ 
    conn.Open(); 
    using (var comm = new SqlCommand(queryString, conn) 
    { 
     using (var ms = new MemoryStream((byte[])comm.ExecuteScalar())) 
     { 
      pictureBox1.Image = Image.FromStream(ms); 
     } 
    } 
} 

Также можно сделать это, если вы хотите указать столбец или использовать другие столбцы в строке.

using (var conn = new SqlConnection(connectionString)) 
{ 
    conn.Open(); 
    using (var comm = new SqlCommand(queryString, conn) 
    { 
     using (var reader = new comm.ExecuteReader()) 
     { 
      if (reader.Read()) 
      { 
       using (var ms = new MemoryStream((byte[])reader["Column"])) 
       { 
        pictureBox1.Image = Image.FromStream(ms); 
       } 
      } 
     } 
    } 
} 
Смежные вопросы