C# 将一个字节 [] 放入数据库,稍后检索
本文关键字:数据库 检索 字节 一个 | 更新日期: 2023-09-27 18:31:23
在我的 c# wpf 项目中,我有一个字节数组,需要将其存储在数据库中并转换回字节数组。存储字节数组的正确方法是什么?我的查询如下所示:
string query = "UPDATE sometable SET file= @File WHERE identifier = @identifierwhere";
upsert = new SqlCommand(query, _connector.getMsConnection());
upsert.Parameters.Add(new SqlParameter("@identifier", v.UniqueIdentifier));
upsert.Parameters.Add(new SqlParameter("@File ", filestring""));
filestring i made like:
if (v.File != null)
{
fileString = GetStringFromBytes(v.File);
}
我使用这个函数
static string GetStringFromBytes(byte[] bytes)
{
char[] chars = new char[bytes.Length / sizeof(char)];
System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
return new string(chars);
}
当我查看我的数据库时,我看到的只是一个字母"A",当我去bbuging时,我看到文件字符串包含"中文"字符的值。存储和检索字节数组的正确方法是什么?
使用 BINARY 或 VARBINARY 来存储二进制数据。
string query = "INSERT INTO dbo.MyTable(Content) VALUES(@Content)";
using(SqlConnection connection = new SqlConnection(/*yout connection string here*/))
using(SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
SqlParameter param = command.Parameters.Add("@Content", SqlDbType.VarBinary);
param.Value = YourByteArrayVariableHere;
command.ExecuteNonQuery();
}
可以使用 SqlDataReader 来检索它,以获取数据,然后将结果转换为字节数组。此代码仅获取第一行。如果您想获得更多使用while (d.Read())
而不是if (d.Read())
.
string query = "Select Content from dbo.MyTable";
using(SqlConnection connection = new SqlConnection(/*your connection string here*/))
using(SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader d = command.ExecuteReader())
{
if (d.Read())
{
byte[] byteArray = (byte[])d["Content"];
}
}
}