PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak wstawić i pobrać obraz z PostgreSql za pomocą C#

AFAIK nie możesz pobrać byte[] za pomocą ExecuteScalar. Zamiast tego powinieneś użyć ExecuteReader. Aby być po bezpiecznej stronie podczas wstawiania parametrów, wolę samodzielnie określać typy, więc moja wstawka wygląda tak:

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

Następnie mogę pobrać i załadować obraz w ten sposób:

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

Nie wiem, czy określenie typu danych we wstawce ma jakiekolwiek znaczenie, więc spróbuj najpierw pobrać za pomocą czytnika. Jeśli to nie zadziała, sugeruję zmianę procedury wstawiania na coś podobnego do mojego.

Proszę zauważyć, że w moim przykładzie id jest liczbą całkowitą, a nie zmiennym znakiem!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj definicję funkcji, sekwencji, typu itp. w Postgresql za pomocą zapytania SQL

  2. Problemy z szeregowym typem danych pg_dump

  3. Określ strefę czasową, która ma być używana jako referencyjna strefa czasowa

  4. Po przywróceniu PostgreSQL otrzymuję odmowę uprawnień dla relacji django_session

  5. Wywołanie transform() bez zestawu SRID nie jest obsługiwane