Bd + Picturebox

  • Автор темы Haicon
  • Дата начала
Статус
Закрыто для дальнейших ответов.
H

Haicon

Гость
#1
Недавно начал работать с С#. Необходимо в бд запихнуть картинку загруженную в picturebox а потом считать обратно из бд в picturebox

вот как я делаю

загрузка изображения

Код:
	 public AddUsers(int rec)
{
InitializeComponent();
IDGr = rec;

string select = "SELECT Users.Pic As UPIC FROM Users WHERE Users.ID = @P0;";
DataTable dt = GetDataSqlString(select, IDGr);

if (dt.Rows.Count != 0)
{
DataRow dr = dt.Rows[0];
if (dr["UPIC"] != DBNull.Value)
{
try
{
byte[] byImage = (byte[])dr["UPIC"];
MemoryStream ms = new MemoryStream(byImage, 0, byImage.Length);
Image im = Image.FromStream(ms);
pictureBox1.Image = im;

}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
}
}

static public DataTable GetDataSqlString(string sSql, params object[] obj)
{
using (SqlConnection con = new SqlConnection(Nastr.ConString))
{
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = sSql;

int i =0;
foreach(object o in obj)
{
cmd.Parameters.AddWithValue("@P" + i.ToString(), o);
i++;
}
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
con.Close();
return dt;
}
}
при этом в бд уже загружены в некоторые позиции картинки там где была загружена gif изображение корректно открывается. если было загружено jpg то выдает следующее иключение

---------------------------

---------------------------
System.ArgumentException: Недопустимый параметр.
в System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
в System.Drawing.Image.FromStream(Stream stream)
в Haicon.NetHelper.ServHelper.AddUsers..ctor(Int32 rec) в D:\Programming\Projects\C#\Тест\NetHelper\ServHelper\AddUsers.cs:строка 122
---------------------------
ОК
---------------------------
на строку Image im = Image.FromStream(ms);


в случае записи в бд


Код:
		static public int SqlStringExec(string sSql, params object[] obj)
{
using (SqlConnection con = new SqlConnection(Nastr.ConString))
{
SqlCommand cmd = new SqlCommand(sSql, con);
int i = 0;
foreach (object o in obj)
{
cmd.Parameters.AddWithValue("@P" + i.ToString(), o);
i++;
}

try
{
con.Open();
int count = cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
return 0;
}
}

private void Ok_Click(object sender, EventArgs e)
{
string SqlString;
Byte[] byImage = null;

if (pictureBox1.Image != null)
{
try
{
MemoryStream ms = new MemoryStream();
Icon.FromHandle((((Bitmap)pictureBox1.Image).GetHicon())).Save(ms);
byImage = ms.ToArray();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}

}
SqlString = "UPDATE Users pic = @P1 WHERE ID = @P0;";

SqlStringExec(SqlString, IDGr, byImage);

}
происходит следующее картинку jpg reiftn на ура (только не могу просмотреть что там записалось так как вышестоящий код не открывает хотя в бд в данном поле записан ).
при попытке загрузить в picturebox gif выкидывает исключение

ExternalException was unnadled
В GDI+ возникла ошибка общего вида.

Код:
		private void pictureBox1_DoubleClick(object sender, EventArgs e)
{
OpenFileDialog oFD = new OpenFileDialog();
oFD.Filter = "JPEG Images (*.jpg,*.jpeg)|*.jpg;*.jpeg|Gif Images (*.gif)|*.gif|Bitmaps (*.bmp)|*.bmp";
oFD.FilterIndex = 1;

if (oFD.ShowDialog() == DialogResult.OK)
pictureBox1.Load(oFD.FileName);
}
Подскажите что я не правильно делаю!!
 
Статус
Закрыто для дальнейших ответов.