PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да вмъкнете и извлечете изображение от PostgreSql с помощта на C#

AFAIK не можете да извлечете байт [] с помощта на ExecuteScalar. Вместо това трябва да използвате ExecuteReader. За по-голяма сигурност, когато вмъквам параметри, предпочитам сам да определям типове, така че моето вмъкване изглежда така:

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

След това мога да извлека и заредя изображението по следния начин:

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

Не знам дали определянето на типа данни при вмъкване има някаква разлика, така че опитайте първо да извлечете с помощта на Reader. Ако това не проработи, предлагам да промените вашата рутина за вмъкване с нещо подобно на моята.

Моля, имайте предвид, че в моя пример id е цяло число, а не променлив символ!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:показване на пътувания в рамките на ограничителна кутия

  2. Как да промените база данни на postgresql със Symfony 2.0?

  3. Възможно ли е да изключите обработката на цитати в командата Postgres COPY с CSV формат?

  4. Работа с Unicode последователности в postgresql

  5. Постоянна грешка при изчакване H12 за всички заявки, които изпълняват заявка към база данни