从SQL Server检索varbinary(MAX)以在C#中转换为byte []

16
我正在尝试从SQL Server获取一个varbinary(MAX)类型的数据,然后将其赋值给C#中的byte[]变量。请问如何实现?
谢谢。
2个回答

28
private static byte[] getDocument(int documentId)
{
    using (SqlConnection cn = new SqlConnection("..."))
    using (SqlCommand cm = cn.CreateCommand())
    {
        cm.CommandText = @"
            SELECT DocumentData
            FROM   Document
            WHERE  DocumentId = @Id";
        cm.Parameters.AddWithValue("@Id", documentId);
        cn.Open();
        return cm.ExecuteScalar() as byte[];
    }
}

1
执行标量返回的最大字符数为2033个(https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar%28v=vs.110%29.aspx)。因此,如果您的数据超过2033字节,那么这种方法将无法起作用,对吗? - Ian

1

您需要选择DATALENGTH(data)和data

其中data是您的varbinary(max)

int i=0;
long dataLen = dr.GetInt64(i++);
if (dataLen > 0)
{
    Data = new byte[dataLen];
    dr.GetBytes(i++, 0, Data, 0, (int)dataLen);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接