cn=new SqlConnection(Constr);
cn.Open();
MemoryStream ms=new MemoryStream();
this.pictureBox1.Image.Save(ms,ImageFormat.Jpeg);
byte[] imageBody=ms.ToArray(); string sqlstr="Insert into ImageTable (ImageName,ImageBody,ImageSize) values(@ImageName,@ImageBody,'"+imageBody.Length+"')";
try
{
cm=new SqlCommand(sqlstr,cn);
cm.Parameters.Add("@ImageBody", SqlDbType.Image);
cm.Parameters.Add("@ImageName", SqlDbType.NVarChar);
cm.Parameters["@ImageBody"].Value = imageBody;
cm.Parameters["@ImageName"].Value = this.pictureBox1.Tag.ToString();
                                    cm.ExecuteNonQuery();
cm.Dispose();
MessageBox.Show("上传成功!");
}
catch(Exception er)
{
MessageBox.Show(er.Message);
}
cn.Close();
cn.Dispose();
建表语句如下:
create table ImageTable( id bigint identity(1,1) not null,ImageName varchar(20), ImageBody image,ImageSize nvarchar(20)) 提示问题是:将截断字符串或二进制数据。
请教高手如何解决问题。比较急,在线等.50分起,不够在加!
QQ1902157

解决方案 »

  1.   

    但是image才16,随便一个图片就20K,SQL的字段允许范围是8000,根本不够
      

  2.   

    我已经调到8000了,用的是binary,image是不让条字段长度的
      

  3.   

    cm.Parameters["@ImageName"].Value = this.pictureBox1.Tag.ToString();
    ImageName varchar(20), 
    这两句话冲突了
      

  4.   

    大概知道是什么问题了,不是字段的问题,Image已经足够大了。
    如果这段程序和数据库不在同一台机器的话,超过8000字符的sql命令语句会被系统截断。替换方式,把这段Insert语句放到存储中来实现,即用存储包一层来替换直接使用Insert命令。