如何使用 NPGSQL.GetBytes() 函数

How to use NPGSQL.GetBytes() function

在我的 Postgres 数据库中,我有一个 bytea 列。在我的程序中,我可以插入此列,但是,当我去检索该数据时,我得到

System.InvalidOperationException: 'No row is available'

我可以访问该记录中的另一列,但是当我尝试以下任一方法时:

byte[] bytes = new byte[16];
bytes = (byte[])dr[3];


byte[] bytes = new byte[16];
dr.GetBytes(3, 0, bytes, 0, 16);

抛出错误。提前致谢。

编辑:添加了查询

string sql = "SELECT * FROM as_users WHERE name = @name";

        if (OpenConnection())
        {
            NpgsqlCommand npgsqlCommand = new NpgsqlCommand(sql, Connection);
            npgsqlCommand.Parameters.AddWithValue("name", username);
            npgsqlCommand.Prepare();
            NpgsqlDataReader dr = npgsqlCommand.ExecuteReader();

            if (dr.Read())
            {
                //Doesnt work
                byte[] bytes = new byte[16];
                dr.GetBytes(3, 0, bytes, 0, 16);

                //Does work
                string name = dr.GetString(1);
            }
        }

所解释的问题是由数据库中的错误引起的,而不是由 NPGSQL 函数引起的。删除并重新创建 table 解决了这个问题。以下是我认为是一种从 bytea 列访问数据的 acceptable 方法。

byte[] bytes = new byte[16];
dr.GetBytes(3, 0, bytes, 0, 16);