Bd + Picturebox

Тема в разделе ".NET", создана пользователем Haicon, 21 сен 2008.

Статус темы:
Закрыта.
  1. Haicon

    Haicon Гость

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

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

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

    Код (Text):
         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);


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


    Код (Text):
            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+ возникла ошибка общего вида.

    Код (Text):
            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);
    }
    Подскажите что я не правильно делаю!!
     
Статус темы:
Закрыта.

Поделиться этой страницей