在我的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?'字符。 存储和检索字节数组的正确方法是什么?
答案 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"];
}
}
}