Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Lưu trữ hình ảnh trong cơ sở dữ liệu và truy xuất nó

Bạn có một số vấn đề với mã của mình. Tôi sẽ giải quyết từng dòng một:

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

Mặc dù nó không phải là một vấn đề, nhưng bạn có những bài tập không cần thiết ở đây. Đoạn mã trên có thể được viết rõ ràng hơn theo cách này:

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

Tiếp theo, đoạn mã sau không sử dụng các tham số. Luôn luôn, luôn luôn, LUÔN LUÔN tham số hóa các truy vấn SQL của bạn thay vì xây dựng động SQL. Không, nghiêm túc, luôn luôn. Có, ngay cả khi đó. (Ngoài ra, Str là gì Biến đổi? Một số loại biến phiên bản được sử dụng lại? Đừng làm vậy.)

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

Thay vào đó, nó phải là:

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

Tiếp theo, chúng tôi sẽ chuyển sang phần truy xuất của bạn. Một lần nữa với Str biến, đừng làm điều này. Ngoài ra, bạn cũng cần tham số hóa truy vấn này.

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. Cách di chuyển cơ sở dữ liệu SQL Server sang cơ sở dữ liệu SQL Azure

  2. Trạng thái và phiên hoạt động của SQL Server

  3. lỗi không tìm thấy khóa xử lý thứ nguyên ssas

  4. Cách tạo lập trình sao lưu toàn bộ cơ sở dữ liệu SQL Server 2008 trong thư mục mong muốn

  5. Tại sao truy vấn SQL Server sau trả về dữ liệu 12 tháng chứ không phải dữ liệu 14 tháng