sql >> Databáze >  >> RDS >> PostgreSQL

Jak vložit a načíst obrázek z PostgreSql pomocí C#

AFAIK nemůžete načíst bajt[] pomocí ExecuteScalar. Místo toho byste měli použít ExecuteReader. Pro jistotu při vkládání parametrů raději specifikuji typy sám, takže můj insert vypadá takto:

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

Poté mohu načíst a načíst obrázek takto:

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

Nevím, jestli určení datového typu na insert má nějaký rozdíl, takže zkuste nejprve načíst pomocí čtečky. Pokud to nefunguje, pak navrhuji změnit vaši rutinu vkládání na něco jako já.

Vezměte prosím na vědomí, že v mém příkladu je id celé číslo, nikoli proměnný znak!




  1. Pohánět phpNames pro sloupce s rozlišením velkých a malých písmen

  2. mysql vrací prázdnou sadu

  3. Co znamená <> v Oracle

  4. Jak automatizovat sběr dat při růstu databáze SQL Server