4

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

无法将源类型“字符串”转换为目标类型“字节 []”

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)
4

1 回答 1

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,或仅ExecuteScalar使用 ADO.NET:

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();
}
于 2013-07-16T08:49:49.083 回答