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サーバー管理サーバーで次のことを試してみましたが、うまくいきました:

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

ちなみに、私はvs 2008 proとsql server 2012 expressを使用しています。何か案は?

4

0 に答える 0