如何使用 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);
在我的 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);