Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Simpan gambar dalam database dan ambil kembali

Anda memiliki beberapa masalah dengan kode Anda. Saya akan membahasnya baris demi baris:

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

Meskipun itu bukan masalah, Anda memiliki tugas yang tidak perlu di sini. Kode di atas bisa lebih jelas ditulis seperti ini:

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

Selanjutnya, kode berikut tidak menggunakan parameter. Selalu, selalu, SELALU membuat parameter kueri SQL Anda alih-alih membangun SQL secara dinamis. Tidak, serius, selalu. Ya, meskipun begitu. (Juga, apa itu Str variabel? Semacam variabel instan yang digunakan kembali? Jangan lakukan itu.)

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

Sebaliknya, seharusnya ini:

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

Selanjutnya, kami akan beralih ke pengambilan Anda. Sekali lagi dengan Str variabel, jangan lakukan hal semacam ini. Selain itu, Anda juga perlu membuat parameter kueri ini.

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. Memecahkan masalah Replikasi SQL Server

  2. Aktifkan SQL Server Broker terlalu lama

  3. Perbedaan waktu SQL antara dua tanggal menghasilkan jj:mm:dd

  4. Kesalahan kueri dengan nama kolom yang ambigu dalam SQL

  5. SQL mendapatkan beberapa kolom menjadi satu kolom