string   img = Encoding.Default.GetString(image);
这是啥??????你数据库里存的到底是图片路径还是图片的二进制数据啊?
如果这你都没搞明白,不要着急编码

解决方案 »

  1.   

    如果是路径,你完全应该把字段类型设置为varchar,而不是image
      

  2.   

    因为 本来该保存图片二进制数据 可是 我保存的是图片的路径二进制数据 
    <二进制数据>
      

  3.   

    你先在自己电脑上,把路径转byte数组,看是什么
    然后看存进去,读出来,还是不是这个byte[],变了没
    最后再把它按编码的格式解码
      

  4.   

    byte[] image = (byte[])sqlhelper.ExecuteScalerSQL("select UserImage from tUserInfo where UserInfoID=" + id);
    这不对
    你获取的应该是数据集
    然后再到数据集里去找字段,不要把数据集本身强制转byte[]数组
      

  5.   

    仔细看sqlhelper.ExecuteScalerSQL这个函数的返回值类型
    如果你连如何查询id都没搞清楚,先不要忙着查询字节流
      

  6.   

    ExecuteScalerSQL这个返回的不是第一行第一列 的值object类型吗?
      

  7.   

    你那个image转出来是: System.Byt[e]
    由此可见,你存数据时有问题。
    不过转出来要是:System.Byte[]是比较合理的,你的却是System.Byt[e]
      

  8.   

    不是吧 我没写错  是返回的system.byte[]啊 
      

  9.   

    这还能写错?你要存的内容就是“System.Byte[]”??
    真要这样,你的代码:string   img = Encoding.Default.GetString(image);这个就对啦
      

  10.   

    我确定  多行多列不用这个 用Executereader
      

  11.   

    把你写入的代码放出来看
    估计你当时byte[]转string的时候,转换完就是"System.Byte[]"这个字符串了,写进数据库的就是这个,读出来当然也还是这个.
      

  12.   

    你byte[]转string的代码不会是这样的吧:
    byte[] b=new byte[20];
    string s=b.ToString();
      

  13.   

      string fileName = Context.Request.Files["UserImage"].FileName;
                        string url = "/UploadImgFile/User/";
                        string filepath = UploadImage(url, fileName, 0);
                        userinfo.UserImage = Encoding.UTF8.GetBytes(filepath);
      

  14.   

    byte[]转string时是这样的  img = Encoding.UTF8.GetString(image, 0, image.Length);
      

  15.   

    你还是先断点看filepath到底是什么先
    而且UserImage是byte数组,你存数据库的时候直接存的这个吗,还是又做了什么处理了,比如存的是
    userinfo.UserImage.ToString()
      

  16.   

    userinfo.UserImage这东西直接转回string,是原来的URL吗
    如果是,看数据库里存的数据,跟userinfo.UserImage一样吗
    如果一样,看读出来的,跟存进去的,一样吗?先找到到底哪里不一样了再想为什么会不一样
      

  17.   

    我断点看了的没问题  是直接存的userinfo.UserImage(byte[])
      

  18.   

    我发现 我新增的时候数据存得不对  
    明明是//UploadImgFile//User//20152//2015020917274580728228.jpg 转到byte时 是{byte[56]}
    修改时变成了这样
      sql += " update tUserInfo set VipCardCode='" + userinfo.VipCardCode + "',[UserName]='" + userinfo.UserName + "',[UserIdentityCard]='" + userinfo.VipCardCode + "',[UserSex]='" + userinfo.UserSex + "',[UserTel]='" + userinfo.UserTel + "',[UserBirthday]='" + userinfo.UserBirthday + "',[UserAddress]='" + userinfo.UserAddress + "',[UserImage]='" + userinfo.UserImage + "',[RoleID]=" + userinfo.RoleID + ",[FarmID]=" + userinfo.FarmID + ",Memo='" + userinfo.Memo + "' where UserInfoID=" + userinfo.UserInfoID;update tDbUser set [DbUserName]='adminces                                ',[State]='1',[ComID]='3',[CreateDate]='2015-2-5 00:00:00',[ExpireDate]='2016-2-5 00:00:00' where UserID='3' update tUserInfo set VipCardCode='13245646451',[UserName]='测试修改',[UserIdentityCard]='13245646451',[UserSex]='女',[UserTel]='123153153',[UserBirthday]='2014-1-5 00:00:00',[UserAddress]='测试',[UserImage]='System.Byte[]',[RoleID]=2,[FarmID]=24,Memo='ces' where UserInfoID=5
      

  19.   

    存大字段的时候,允许追加到sql语句中吗?你这句[UserImage]='System.Byte[]' 存在只是一个“System.Byte[]”字符串吧,你那个对应的列的数据库字段类型是什么?
      

  20.   

    数据库中的userimage 是image类型,应该用image类型命令参数存取,你却拼了一个字符串,或许你拼成0x开头的十六进制表示法,去掉单引号还能正确存取二进制数据,以你的方式没试过,不知道会是什么结果,我才想如果不报错的话应该存成了以数据库编码方式的字节数据。再来说userinfo.UserImage=Enconding.UTF8.GetBytes(filepath) 显然得到了图片路径的UTF8编码的字节数据。但是在拼sql时,你用到的却是(隐式转换) userinfo.UserImage.toString()  所以整个都乱套了。