gpt4 book ai didi

c# - Postgres bytea 列返回字符串(字符数组)而不是字节数组

转载 作者:太空狗 更新时间:2023-10-30 00:34:36 25 4
gpt4 key购买 nike

我一直在使用 C# 为我们的产品针对不同的数据库编写具体的提供程序实现。不深入细节,其中一列是字节数组类型(postgres 中的 bytea - 由于偏好 bytea 而不是 blob)。唯一的问题是它不会返回插入的相同值。当我插入 Int32 ("0") 时,我得到 8 [92 和 8x 48](而不是 [0,0,0,0])。我需要一个性能明智的解决方案,它将返回我插入的纯字节,而不是 8 个字节上值“0”的 ASCII 表示。

我正在使用 Npgsql 检索数据。如果有人知道 c# 的解决方案,我也很乐意学习它。

编辑:Postgres 9.0、.Net 3.5

简化

命令查询:- 里面只做了一个插入语句

select InsertOrUpdateEntry(:nodeId, :timeStamp, :data)

数据参数:

byte [] value = BitConverter.GetBytes((int)someValue);

参数分配如下

command.Parameters.Add(new NpgsqlParameter("data", NpgsqlDbType.Bytea) 
{ Value = value });

选择语句:

select * from Entries

我输入了相同的字节数组,我想取回。非常感谢您的帮助。

输入:0 0 0 0
当前输出:92 48 48 48 48 48 48 48 48
预期输出:0 0 0 0

最佳答案

在 Npgsql 中有 NpgsqlDataReader检索插入行的类,例如:

NpgsqlConnection conn = new NpgsqlConnection(connStr);
conn.Open();

NpgsqlCommand insertCmd =
new NpgsqlCommand("INSERT INTO binaryData (data) VALUES(:dataParam)", conn);
NpgsqlParameter param = new NpgsqlParameter("dataParam", NpgsqlDbType.Bytea);

byte[] inputBytes = BitConverter.GetBytes((int)0);
Console.Write("Input:");
foreach (byte b in inputBytes)
Console.Write(" {0}", b);
Console.WriteLine();

param.Value = inputBytes;
insertCmd.Parameters.Add(param);
insertCmd.ExecuteNonQuery();

NpgsqlCommand selectCmd = new NpgsqlCommand("SELECT data FROM binaryData", conn);
NpgsqlDataReader dr = selectCmd.ExecuteReader();
if(dr.Read())
{
Console.Write("Output:");
byte[] result = (byte[])dr[0];
foreach(byte b in result)
Console.Write(" {0}", b);
Console.WriteLine();
}

conn.Close();

C# 应用的结果:

Input: 0 0 0 0
Output: 0 0 0 0

pgAdmin 的结果:

"\000\000\000\000"

编辑:

我找到了你为什么得到的解释:

92 48 48 48 48 48 48 48 48

我用以前的版本检查我的代码 Npgsql2.0.10-bin-ms.net3.5sp1.zip 并得到上面的结果(当然 pgAdmin 返回 \000\000\000\000),所以我认为最好的办法是使用没有此错误的另一个版本。

回答:用户使用高于 2.0.10 的 Npgsql 版本

关于c# - Postgres bytea 列返回字符串(字符数组)而不是字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7150873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com