sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan indsætter og henter du billede fra PostgreSql ved hjælp af C#

AFAIK kan du ikke hente en byte[] ved hjælp af ExecuteScalar. Du bør bruge ExecuteReader i stedet. For at være på den sikre side, når jeg indsætter parametre, foretrækker jeg selv at angive typer, så mit indstik ser sådan ud:

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

Jeg kan derefter hente og indlæse billedet sådan her:

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

Jeg ved ikke, om det gør nogen forskel at angive datatypen ved indsættelse, så prøv bare at hente ved hjælp af en Reader først. Hvis det ikke virker, så foreslår jeg, at du ændrer din indsættelsesrutine til noget som min.

Bemærk venligst, at i mit eksempel er id et heltal, ikke et tegn, der varierer!




  1. få optimeringsværktøjet til at bruge alle kolonner i et indeks

  2. Overførsel af et array af arrays som parameter til en funktion

  3. SQLDeveloper viser ingen tabeller under forbindelser, hvor der står tabeller

  4. To tabeller - hvordan man sletter rækker, hvis ID ikke refereres til i begge tabeller