1

我有一个表,其中有一列类型为 varbinary(max),我试图用字节数组对其进行更新。我想我用下面的代码正确地做,但我总是得到“数据将被截断”错误。info.logoBin 是 byte[] ,它的大小约为 200k (它是一个图像文件)。

using (SqlConnection conn = OpenConnection())
{
    using (SqlCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = "UPDATE COMPANIES SET LOGO_TYPE=@param1, LOGO_HASH=@param2, " +
            "LOGO_BIN=@param3 WHERE ID=@param4";
        cmd.Parameters.AddWithValue("@param1", info.LogoType);
        cmd.Parameters.AddWithValue("@param2", info.LogoHash);
        if (info.LogoBin != null)
        {
            cmd.Parameters.Add("@param3", SqlDbType.VarBinary, -1).Value = info.LogoBin;
        }
        else
        {
            cmd.Parameters.Add("@param3", SqlDbType.VarBinary, -1);
            cmd.Parameters["@param3"].Value = DBNull.Value;
        }
        cmd.Parameters.AddWithValue("@param4", id);

        ExecNonQuery(cmd);
    }
    conn.Close();
}

我试过指定一个大小,我试过使用 SqlDbType.Image,我什至试过只给值 new byte[] { 0xff, 0xfa },但我总是得到同样的错误。最后,我在 sql server mgmt server 中尝试了以下操作,效果很好:

insert into COMPANIES (LOGO_BIN) values (0xfffa);

顺便说一句,我使用的是 vs 2008 pro 和 sql server 2012 express。有任何想法吗?

4

0 回答 0