バイト配列で更新しようとしている 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サーバー管理サーバーで次のことを試してみましたが、うまくいきました:
insert into COMPANIES (LOGO_BIN) values (0xfffa);
ちなみに、私はvs 2008 proとsql server 2012 expressを使用しています。何か案は?