Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Съхранявайте изображението в базата данни и го извличайте

Имате няколко проблема с вашия код. Ще го разгледам ред по ред:

MemoryStream ms =new MemoryStream();
byte[] PhotoByte=null;
PhotoByte=ms.ToArray();
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
PhotoByte =ms.ToArray();

Въпреки че не е проблем, тук имате ненужни задачи. Горният код може да бъде по-ясно написан по следния начин:

MemoryStream ms =new MemoryStream();
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
byte[] PhotoByte =ms.ToArray();

На следващо място, следният код не използва параметри. Винаги, винаги, ВИНАГИ параметризирайте вашите SQL заявки вместо динамично изграждане на SQL. Не, сериозно, винаги. Да, дори тогава. (Също така, какво е Str променлива? Някакъв вид повторно използвана променлива на екземпляр? Не правете това.)

Str = "insert into Experimmm Values('" + PhotoByte + "','" + textBox1.Text + "')";
Conn.Open();
cmd.Connection = Conn;
cmd.CommandText = Str;
cmd.ExecuteNonQuery();
Conn.Close();

Вместо това трябва да е следното:

Conn.Open();
using(SqlCommand cmd = connection.CreateCommand())
{
    cmd.CommandText = "insert into Experimmm (column list) values(@data, @name)";

    cmd.Parameters.Add("@data", SqlDbType.VarBinary).Value = PhotoByte;
    cmd.Parameters.Add("@name", SqlDbType.VarChar, yourlength).Value = textBox1.Text;

    cmd.ExecuteNonQuery();
}
Conn.Close();

След това ще преминем към вашето извличане. Отново с Str променлива, не правете такива неща. Освен това трябва да параметризирате и тази заявка.

byte[] data;
string name;

Conn.Open();
using(SqlCommand cmd = Conn.CreateCommand())
{    
    cmd.CommandText = "select column_list from Experimmm where id = @id";

    cmd.Parameters.Add("@id", SqlDbType.VarChar, field_length).Value = textBox2.Text;

    using(SqlDataReader dr = cmd.ExecuteReader())
    {
        if (dr.Read())
        {
            data = (byte[])dr.GetValue(0); 
            name = (string)dr.GetValue(1);
        }
    }
}
Conn.Close();

label1.Text = name;
pictureBox2.Image = Image.FromStream(new MemoryStream(data));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Добавете първичен ключ към съществуваща таблица

  2. Основна концепция за заключване на SQL Server

  3. Изчисляване на стойност с помощта на предишна стойност на ред в T-SQL

  4. Мога ли да върна varchar(max) от съхранена процедура?

  5. Преобразуване на ‘time’ в ‘datetimeoffset’ в SQL Server (T-SQL примери)