c#将一个byte []放入数据库并稍后进行检索

时间:2016-01-20 21:55:15

标签: c# sql arrays wpf

在我的c#wpf项目中,我有一个字节数组,需要存储在数据库中并转换回bytearray。存储字节数组的正确方法是什么?我的查询如下:

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'当debbuging我看到filestring的值包含了' chinese?'字符。 存储和检索字节数组的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

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