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

Cách chèn và lấy hình ảnh từ PostgreSql bằng C #

AFAIK bạn không thể truy xuất một byte [] bằng ExecuteScalar. Bạn nên sử dụng ExecuteReader để thay thế. Để an toàn khi chèn các tham số, tôi thích tự chỉ định các loại, vì vậy phần chèn của tôi trông như thế này:

using (var conn = new NpgsqlConnection(connString))
{
    string sQL = "insert into picturetable (id, photo) VALUES(65, @Image)";
    using (var command = new NpgsqlCommand(sQL, conn))
    {
        NpgsqlParameter param = command.CreateParameter();
        param.ParameterName = "@Image";
        param.NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Bytea;
        param.Value = ImgByteA;
        command.Parameters.Add(param);

        conn.Open();
        command.ExecuteNonQuery();
    }
}

Sau đó, tôi có thể truy xuất và tải hình ảnh như sau:

using (var conn = new NpgsqlConnection(connString))
{
    string sQL = "SELECT photo from picturetable WHERE id = 65";
    using (var command = new NpgsqlCommand(sQL, conn))
    {
        byte[] productImageByte = null;
        conn.Open();
        var rdr = command.ExecuteReader();
        if (rdr.Read())
        {
            productImageByte = (byte[])rdr[0];
        }
        rdr.Close();
        if (productImageByte != null)
        {
            using (MemoryStream productImageStream = new System.IO.MemoryStream(productImageByte))
            {
                ImageConverter imageConverter = new System.Drawing.ImageConverter();
                pictureBox1.Image = imageConverter.ConvertFrom(productImageByte) as System.Drawing.Image;
            }
        }
    }
}

Tôi không biết liệu việc chỉ định kiểu dữ liệu trên chèn có tạo ra bất kỳ sự khác biệt nào hay không, vì vậy trước tiên hãy thử truy xuất bằng Trình đọc. Nếu điều đó không hiệu quả, thì tôi khuyên bạn nên thay đổi quy trình chèn của bạn thành một thứ giống như của tôi.

Xin lưu ý trong ví dụ id của tôi là một số nguyên, không phải là một ký tự thay đổi!




  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ần chọn động một phần tử mảng JSON từ bảng postgresql

  2. django không thể kết nối với RDS postgresql

  3. Đặt lược đồ cho tất cả các truy vấn của một kết nối trong psycopg2:Bắt điều kiện chủng tộc khi đặt search_path

  4. Cách chèn và lấy hình ảnh từ PostgreSql bằng C #

  5. Kết nối với postgres từ các bản ghi bị treo