本帖最后由 zhouquan2009 于 2012-06-03 01:52:35 编辑

解决方案 »

  1.   

    cmd.Parameters.AddWithValue("?pic_data", MySqlDbType.VarBinary).Value = imgByte;
    改成这样
    cmd.Parameters.Add("?pic_data", MySqlDbType.VarBinary).Value = imgByte;
    试试
      

  2.   

    嗯,开始的时候写的是您说的那样
    但是提示说Add方法过时了,推荐使用AddWithValue,后台连SQL Server的时候一直用Add都挺好的,不知道是不是 mysql-connector的问题
    两种方法我都有试过,都是报同样的错误
      

  3.   

    那这样吧
    MySqlParameter param = new MySqlParameter();
    param.MySqlDbType = MySqlDbType.VarBinary;
    param.Value = imgByte;
    cmd.Parameters.Add(param);两个方法,参数类型有些差异,过期的只是下面那个
    public MySqlParameter Add(string parameterName, MySqlDbType dbType);
    [Obsolete("Add(String parameterName, Object value) has been deprecated.  Use AddWithValue(String parameterName, Object value)")]
    public MySqlParameter Add(string parameterName, object value);
      

  4.   

    忘了这句
    param.ParameterName = "?pic_name";
      

  5.   

    十分感谢,问题解决了,很想知道这是为什么,有两点疑问
    您上面说的
    public MySqlParameter Add(string parameterName, MySqlDbType dbType);
    [Obsolete("Add(String parameterName, Object value) has been deprecated.  Use AddWithValue(String parameterName, Object value)")]
    public MySqlParameter Add(string parameterName, object value);
    这里没有太明白,是指
    public MySqlParameter Add(string parameterName, object value)
    这个方法过期么,上面的
    public MySqlParameter Add(string parameterName, MySqlDbType dbType)
    这个方法没有过期?
    还有一点就是过期是指什么,为什么我那么写不能实现呢?
    谢谢!
      

  6.   

    因为 object 是任何类型的基类,任何类型对于 object 都能隐式转换,所以调用 Add 时稍不注意就可能调用的是下面的那个方法,下面那个虽然过期,但是作用还是有的,只是 byte[] 的值需要指明 MySqlDbType.VarBinary 才能被正确解析,而调用到下面那个 Add 时,把 MySqlDbType.VarBinary 当作输入数据库的值来处理了,实际的 MySqlDbType 是相对错误的。
      

  7.   

    按照您的说法
    cmd.Parameters.AddWithValue("?pic_data", MySqlDbType.VarBinary).Value = imgByte;
    是调用了
    public MySqlParameter Add(string parameterName, object value);
    方法,将MySqlDbType.VarBinary转化成了一个object,当成了"?pic_data"的值
    所以导致错误?
    然后.value又将这个parameters的值赋值成了imgByte,这时候由于没有指定参数的类型为MySqlDbType.VarBinary
    所以执行时会报错
    这么理解对么?