sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man infogar och hämtar en bild från PostgreSql med C#

AFAIK kan du inte hämta en byte[] med ExecuteScalar. Du bör använda ExecuteReader istället. Bara för att vara på den säkra sidan när jag infogar parametrar, föredrar jag att specificera typer själv, så min infogning ser ut så här:

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

Jag kan sedan hämta och ladda bilden så här:

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

Jag vet inte om det gör någon skillnad att specificera datatypen på infogning, så försök bara hämta med en Reader först. Om det inte fungerar föreslår jag att du ändrar din infogningsrutin till något liknande min.

Observera att i mitt exempel id är ett heltal, inte ett tecken som varierar!




  1. Returnera dynamisk tabell med okända kolumner från PL/pgSQL-funktionen

  2. Jämför varchar med röding

  3. SQL Server Float-datatypberäkning kontra decimal

  4. Hur man konfigurerar flytande nHibernate med MySQL