sql >> データベース >  >> RDS >> PostgreSQL

C#を使用してPostgreSqlから画像を挿入および取得する方法

    AFAIKは、ExecuteScalarを使用してbyte[]を取得することはできません。代わりに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. T-SQL(sp_tables)を使用してSQLServerのテーブルとビューのリストを返す

    2. 複雑なMySQLクエリが誤った結果を出している

    3. Oracle(およびMySQL)で派生列リストを表現するための一般的な回避策はありますか?

    4. WooCommerceで変動する商品価格を変更するMySQLクエリ