Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przechowuj obraz w bazie danych i pobierz go

Masz kilka problemów z kodem. Zajmę się tym linijka po linijce:

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

Chociaż to nie problem, masz tu niepotrzebne zadania. Powyższy kod można by bardziej przejrzyście napisać w ten sposób:

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

Następnie poniższy kod nie używa parametrów. Zawsze, zawsze ZAWSZE parametryzuj zapytania SQL zamiast dynamicznie kompilować SQL. Nie, poważnie, zawsze. Tak, nawet wtedy. (Ponadto, czym jest Str zmienny? Jakiś rodzaj ponownie użytej zmiennej instancji? Nie rób tego.)

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

Zamiast tego powinno wyglądać tak:

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();

Następnie przejdziemy do Twojego pobierania. Ponownie za pomocą Str zmiennej, nie rób tego typu rzeczy. Musisz również sparametryzować to zapytanie.

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. czy istnieje przewaga varchar(500) nad varchar(8000)?

  2. Jak zmienić atrybut kolumny za pomocą skryptu sql?

  3. Łączenie WSZYSTKICH użytkowników z loginem po przywróceniu bazy danych SQL Server 2005

  4. Naruszenie błędu ograniczenia PRIMARY KEY SQL

  5. Wkładanie z dwóch innych tabel do trzeciego