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时,我看到文件字符串包含"中文"字符的值。存储和检索字节数组的正确方法是什么?

C# 将一个字节 [] 放入数据库,稍后检索

使用 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"];
        }
    }
}