从数据表中分配二进制数据

时间:2013-07-16 08:41:23

标签: c# c#-4.0

我想从DataTable获取二进制数据到字节数组。 但是下面的代码返回

  

无法转换来源类型' string'定位类型' byte []'

DataTable dataTable = DB.GetData("SELECT * FROM StackOverflow WHERE Id = '" + id + "'");

byte[] byteArray = null;


if(dataTable.Rows.Count > 0)
{
   byteArray = dataTable.Rows[0]["BinaryData"].ToString());
}

如何从StackOverflow表中获取binaryData?

StackOverflow table 
----------------------
Id    int
BinaryData  varbinary(max)

1 个答案:

答案 0 :(得分:5)

如果您致电.ToString(),您将获取字符串;相反,简单地演员:

byteArray = (byte[])dataTable.Rows[0]["BinaryData"];

但是,这里不需要DataTable。就个人而言,我只是使用:

var byteArray = conn.Query<byte[]>(
    "SELECT BinaryData FROM StackOverflow WHERE Id=@id",
    new {id}).FirstOrDefault();

使用dapper,或仅使用ADO.NET ExecuteScalar

byte[] byteArray;
using(var cmd = conn.CreateCommand()) {
   cmd.CommandText = "SELECT BinaryData FROM StackOverflow WHERE Id=@id";
   cmd.Parameters.AddWithValue("id",id);
   byteArray = (byte[])cmd.ExecuteScalar();
}