本帖最后由 aorons 于 2010-09-03 01:59:12 编辑

解决方案 »

  1.   

    先重复我回答过的两句话:
    不是所有的byte[]都能换成有意义的字符串的。
    字符串是方便给人看得电脑一点都不在乎数据存成字符串或原始二进制。
    硬要把二进制转换成字符串,我不认为有实际意义(你能理解或编辑该贴中的‘物品’的‘字符串’数据?)
    硬要把人为转换的字符串塞给电脑作为原始数据,则更是个错误。
    dr["Items"]明明是个1920字节长的数组,存成byte[]就可以了。换成字符串,两个字符对一个byte,每个字符花费2个字节的空间,总共用了7680以上的字节,不是很浪费?要更新数据库,传入byte[]不是很直接?
    using(SqlConnection con = new SqlConnection("..."))
    using(SqlCommand cmd = new SqlCommand("update warehouse set items=@items",con))
    {
       SqlParameter parameter =  cmd.Parameters.Add("@items", SqlDbType.VarBinary);
       parameter.Value = new byte[]{0x12, 0x23, 0x34, 0x45};   con.Open();
       int i = cmd.ExecuteNonQuery();
    }
      

  2.   

    UPDATE warehouse set Items=cast(@items as varbinary(1920)) where AccountID=@accountid1920是不是应该是1980
      

  3.   

    保存的时候这样就可以了
    paramPwd = New SqlParameter("@Password", SqlDbType.Binary, 16)
    paramPwd.Value = hashedDataBytes
    objCmd.Parameters.Add(paramPwd)
    参见
    http://dotnet.aspx.cc/article/1481d80a-f0fd-45e3-a822-94f5be8c8813/read.aspx
      

  4.   

    二进制字段必须是参数的形势更新或者插入,比如存储过程或者参数化SQL语句。 
    不能像普通char字段一样直接操作。
    command.Parameters.Add("@p", System.Data.SqlDbType.VarBinary);
    command.Parameters["@p"].Value = new byte[] { 1, 2, 3, 4 };
     command.ExecuteNonQuery();