最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在 PostgreSQL中解決圖片二進制數(shù)據(jù)由于bytea_output參數(shù)問題導(dǎo)致顯示不正常的問題

 更新時間:2024年03月25日 09:22:58   作者:伍華聰  
無論 bytea_output 參數(shù)設(shè)置為 hex 還是 escape,你都可以通過 C# 訪問 PostgreSQL 數(shù)據(jù)庫,并且正常獲取并顯示圖片,本篇隨筆介紹這個問題的處理過程,感興趣的朋友跟隨小編一起看看吧

在 PostgreSQL 中,bytea_output 參數(shù)控制在查詢結(jié)果中 bytea 類型的顯示格式。默認情況下,bytea_output 的值為 hex,這意味著在查詢結(jié)果中,bytea 類型的數(shù)據(jù)以十六進制格式顯示。但是,如果你的應(yīng)用程序期望以二進制格式獲取圖像數(shù)據(jù),則將 bytea_output 設(shè)置為 escape 可能更適合。無論 bytea_output 參數(shù)設(shè)置為 hex 還是 escape,你都可以通過 C# 訪問 PostgreSQL 數(shù)據(jù)庫,并且正常獲取并顯示圖片。本篇隨筆介紹這個問題的處理過程。

在 PostgreSQL 中,bytea_output 參數(shù)控制在查詢結(jié)果中 bytea 類型的顯示格式。默認情況下,bytea_output 的值為 hex,這意味著在查詢結(jié)果中,bytea 類型的數(shù)據(jù)以十六進制格式顯示。但是,如果你的應(yīng)用程序期望以二進制格式獲取圖像數(shù)據(jù),則將 bytea_output 設(shè)置為 escape 可能更適合。無論bytea_output參數(shù)設(shè)置為hex還是escape,你都可以通過 C# 訪問 PostgreSQL 數(shù)據(jù)庫,并且正常獲取并顯示圖片。本篇隨筆介紹這個問題的處理過程。

1、碰到的數(shù)據(jù)庫圖片在界面顯示問題

在我們的Winform框架中,由于底層是支持多種數(shù)據(jù)庫的設(shè)計,因此可以兼容MS SQLServer、Oracle、Mysql、PostgreSQL、SQLite等數(shù)據(jù)庫的,但是一般我們用的是SQLServer、MySql居多,有客戶切換到PostgreSQL數(shù)據(jù)庫的時候,發(fā)現(xiàn)圖片顯示不正常,需要對圖片進行十六進制轉(zhuǎn)換才能正常顯示。

默認的方式,這里方框在SQLServer等數(shù)據(jù)庫上是正常顯示圖標(biāo)的,打開編輯也是可以展示菜單的圖表的,不過由于切換到PostgreSQL后,這里圖標(biāo)消失,檢查數(shù)據(jù)庫操作,默認的處理都是一致的,因此考慮是否為數(shù)據(jù)庫參數(shù)配置問題。

2、解決問題

打開ChatGPT,或者百度、Google一下,細心都可以發(fā)現(xiàn),在 PostgreSQL 中默認情況下,bytea_output 的值為 hex,這意味著在查詢結(jié)果中,bytea 類型的數(shù)據(jù)以十六進制格式顯示。如果你的應(yīng)用程序期望以二進制格式獲取圖像數(shù)據(jù),則將 bytea_output 設(shè)置為 escape 可能更適合。

我們找到PostgreSQL的安裝目錄,找到 C:\Program Files\PostgreSQL\13\data\postgresql.conf里面的數(shù)據(jù)庫配置文件,找到bytea_output的值查看。

果然發(fā)現(xiàn)其默認值為hex,我們按要求修改為escape,并去掉注釋符號#,如下所示。

重啟PostgreSQL,并測試系統(tǒng)數(shù)據(jù)庫,顯示和保存處理正常。

3、兩種方式處理的差異

如果 bytea_output 參數(shù)設(shè)置為 hex,你可以通過將讀取到的十六進制字符串轉(zhuǎn)換為字節(jié)數(shù)組,然后使用這些字節(jié)數(shù)組來創(chuàng)建圖像對象。以下是一個示例代碼,演示了如何在 C# 中獲取并顯示圖片,即使 bytea_output 參數(shù)設(shè)置為 hex

class Program
{
    static void Main()
    {
        string connString = "Host=myServerAddress;Port=myPort;Username=myUsername;Password=myPassword;Database=myDatabase";
        using (var conn = new NpgsqlConnection(connString))
        {
            conn.Open();
            // 執(zhí)行 SQL 查詢以獲取圖像數(shù)據(jù)
            string sql = "SELECT image_column FROM your_table WHERE id = @id";
            int id = 1; // 替換為你要查詢的圖像的 ID
            using (var cmd = new NpgsqlCommand(sql, conn))
            {
                cmd.Parameters.AddWithValue("@id", id);
                // 讀取圖像數(shù)據(jù)
                using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                {
                    if (reader.Read())
                    {
                        // 獲取十六進制字符串
                        string hexString = reader.GetString(0);
                        // 將十六進制字符串轉(zhuǎn)換為字節(jié)數(shù)組
                        byte[] imageData = StringToByteArray(hexString);
                        // 創(chuàng)建圖像對象
                        using (MemoryStream ms = new MemoryStream(imageData))
                        {
                            Image image = Image.FromStream(ms);
                            // 顯示圖像
                            ShowImage(image);
                        }
                    }
                }
            }
        }
    }
    static void ShowImage(Image image)
    {
        // 創(chuàng)建一個新的窗體
        using (var form = new System.Windows.Forms.Form())
        {
            // 創(chuàng)建 PictureBox 控件
            var pictureBox = new System.Windows.Forms.PictureBox();
            pictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
            pictureBox.Image = image;
            // 將 PictureBox 添加到窗體中
            form.Controls.Add(pictureBox);
            // 設(shè)置窗體大小并顯示
            form.Size = new System.Drawing.Size(image.Width, image.Height);
            form.ShowDialog();
        }
    }
    static byte[] StringToByteArray(string hex)
    {
        int NumberChars = hex.Length / 2;
        byte[] bytes = new byte[NumberChars];
        using (var sr = new StringReader(hex))
        {
            for (int i = 0; i < NumberChars; i++)
                bytes[i] = Convert.ToByte(new string(new char[2] { (char)sr.Read(), (char)sr.Read() }), 16);
        }
        return bytes;
    }
}

如果 bytea_output 參數(shù)設(shè)置為 escape,則可以直接使用 Npgsql 從數(shù)據(jù)庫中讀取圖像數(shù)據(jù),并將其轉(zhuǎn)換為字節(jié)數(shù)組,而不需要進行額外的處理。以下是示例代碼:

using Npgsql;
using System;
using System.Data;
using System.Drawing;
using System.IO;
class Program
{
    static void Main()
    {
        string connString = "Host=myServerAddress;Port=myPort;Username=myUsername;Password=myPassword;Database=myDatabase";
        using (var conn = new NpgsqlConnection(connString))
        {
            conn.Open();
            // 執(zhí)行 SQL 查詢以獲取圖像數(shù)據(jù)
            string sql = "SELECT image_column FROM your_table WHERE id = @id";
            int id = 1; // 替換為你要查詢的圖像的 ID
            using (var cmd = new NpgsqlCommand(sql, conn))
            {
                cmd.Parameters.AddWithValue("@id", id);
                // 讀取圖像數(shù)據(jù)
                using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                {
                    if (reader.Read())
                    {
                        // 獲取圖像數(shù)據(jù)字節(jié)數(shù)組
                        byte[] imageData = (byte[])reader["image_column"];
                        // 創(chuàng)建圖像對象
                        using (MemoryStream ms = new MemoryStream(imageData))
                        {
                            Image image = Image.FromStream(ms);
                            // 顯示圖像
                            ShowImage(image);
                        }
                    }
                }
            }
        }
    }
    static void ShowImage(Image image)
    {
        // 創(chuàng)建一個新的窗體
        using (var form = new System.Windows.Forms.Form())
        {
            // 創(chuàng)建 PictureBox 控件
            var pictureBox = new System.Windows.Forms.PictureBox();
            pictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
            pictureBox.Image = image;
            // 將 PictureBox 添加到窗體中
            form.Controls.Add(pictureBox);
            // 設(shè)置窗體大小并顯示
            form.Size = new System.Drawing.Size(image.Width, image.Height);
            form.ShowDialog();
        }
    }
}

無論 bytea_output 參數(shù)設(shè)置為 hex 還是 escape,你都可以通過 C# 訪問 PostgreSQL 數(shù)據(jù)庫,并且正常獲取并顯示圖片。

到此這篇關(guān)于在 PostgreSQL 中解決圖片二進制數(shù)據(jù)由于bytea_output參數(shù)問題導(dǎo)致顯示不正常的問題的文章就介紹到這了,更多相關(guān)PostgreSQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PostgreSQL的 archive_mode 參數(shù)配置示例詳解

    PostgreSQL的 archive_mode 參數(shù)配置示例詳解

    本文詳細介紹了PostgreSQL的archive_mode參數(shù),包括其三個選項(off、on、always)的對比和使用場景,以及在不同模式下的配置和行為特點,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • PostgreSQL防止WAL文件撐爆磁盤的策略指南

    PostgreSQL防止WAL文件撐爆磁盤的策略指南

    在 PostgreSQL 中,Write-Ahead Logging(WAL)是保障數(shù)據(jù)持久性與崩潰恢復(fù)的核心機制,若未合理配置和管理,WAL 文件可能持續(xù)累積,最終導(dǎo)致磁盤空間耗盡,本文將系統(tǒng)性地詳解 如何防止 WAL 文件撐爆磁盤,涵蓋原理、風(fēng)險識別、核心配置、監(jiān)控手段及最佳實踐
    2026-02-02
  • postgresql SQL語句變量的使用說明

    postgresql SQL語句變量的使用說明

    這篇文章主要介紹了postgresql SQL語句變量的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 解決postgreSql遠程連接數(shù)據(jù)庫超時的問題

    解決postgreSql遠程連接數(shù)據(jù)庫超時的問題

    這篇文章主要介紹了解決postgreSql遠程連接數(shù)據(jù)庫超時的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL判斷字符串是否包含目標(biāo)字符串的多種方法

    PostgreSQL判斷字符串是否包含目標(biāo)字符串的多種方法

    這篇文章主要介紹了PostgreSQL判斷字符串是否包含目標(biāo)字符串的多種方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • PostgreSQL有效地處理數(shù)據(jù)的加密和解密的常見方法

    PostgreSQL有效地處理數(shù)據(jù)的加密和解密的常見方法

    在信息化建設(shè)和等保建設(shè)中,都要求實現(xiàn)對用戶數(shù)據(jù)的隱私保護,也就是我們常說的脫敏,那么在?PostgreSQL?數(shù)據(jù)庫中有沒有這樣的方法或者策略可以實現(xiàn)呢,本文小編將給大家介紹一下PostgreSQL有效地處理數(shù)據(jù)的加密和解密的常見方法,需要的朋友可以參考下
    2025-03-03
  • PostgreSQL中offset...limit分頁優(yōu)化的一些常見手段

    PostgreSQL中offset...limit分頁優(yōu)化的一些常見手段

    我們在使用數(shù)據(jù)庫進行分頁查詢時,隨著offset過濾的數(shù)據(jù)越來越多,查詢也會越來越慢,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL中offset...limit分頁優(yōu)化的一些常見手段,需要的朋友可以參考下
    2023-05-05
  • PostgreSQL實現(xiàn)一個通用標(biāo)簽系統(tǒng)

    PostgreSQL實現(xiàn)一個通用標(biāo)簽系統(tǒng)

    這篇文章主要給大家介紹了關(guān)于利用PostgreSQL實現(xiàn)一個通用標(biāo)簽系統(tǒng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Postgresql的日志配置教程詳解

    Postgresql的日志配置教程詳解

    這篇文章主要介紹了Postgresql的日志配置教程詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • PostgreSQL  JOIN 聯(lián)表查詢實戰(zhàn)演練(內(nèi)連接 / 外連接 / 交叉連接)

    PostgreSQL  JOIN 聯(lián)表查詢實戰(zhàn)演練(內(nèi)連接 / 外連接

    本文介紹了PostgreSQL中的JOIN查詢,包括INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN和CROSS JOIN,通過實際示例和Java代碼,展示了如何在Java應(yīng)用程序中執(zhí)行這些JOIN操作,感興趣的朋友跟隨小編一起看看吧
    2026-03-03

最新評論

邛崃市| 藁城市| 英山县| 常熟市| 商南县| 永嘉县| 武威市| 建阳市| 商水县| 塔城市| 辽阳市| 合阳县| 昂仁县| 册亨县| 六枝特区| 达拉特旗| 商河县| 黔江区| 蒲江县| 仙桃市| 明星| 葫芦岛市| 三门峡市| 黔江区| 长垣县| 濮阳市| 松江区| 闵行区| 青铜峡市| 凤冈县| 额济纳旗| 乌鲁木齐市| 北碚区| 霍山县| 闻喜县| 蕉岭县| 来安县| 达州市| 无锡市| 邵东县| 富蕴县|