PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara memasukkan dan mengambil gambar dari PostgreSql menggunakan C#

AFAIK Anda tidak dapat mengambil satu byte[] menggunakan ExecuteScalar. Anda harus menggunakan ExecuteReader sebagai gantinya. Agar aman saat memasukkan parameter, saya lebih suka menentukan jenis sendiri, jadi sisipan saya terlihat seperti ini:

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

Saya kemudian dapat mengambil dan memuat gambar seperti ini:

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;
            }
        }
    }
}

Saya tidak tahu apakah menentukan tipe data pada sisipan membuat perbedaan, jadi coba ambil saja menggunakan Pembaca terlebih dahulu. Jika itu tidak berhasil, maka saya sarankan untuk mengubah rutinitas penyisipan Anda menjadi sesuatu seperti milik saya.

Harap dicatat dalam contoh saya id adalah bilangan bulat, bukan karakter yang bervariasi!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan Postgresql untuk memperbarui bidang menggunakan ekspresi reguler

  2. django.db.migrations.RenameModel dan nama urutan AutoField

  3. SELECT .. INTO untuk membuat tabel di PL/pgSQL

  4. Periksa apakah tabel sqlalchemy kosong

  5. Menggunakan Postgresql dengan Grails :Urutan atau tabel yang hilang:hibernate_sequence