麻烦看一下,怎么存可能为null的 图片 到数据库?

softneo 2013-04-27 02:33:33
属性Pohto定义如下:

public byte[] Photo{
get;
set;
}


现在我要把这个属性的值存到数据库的字段Photo(类型Image)中。

但是这个属性可能为null,于是这样判断:

public static object GetNull(object value) {
if (value == null) {
return value = DBNull.Value; //返回
}
else {
return value;
}
}

调用上面的函数

new SqlParameter("@Photo", SqlHelper.GetNull(emp.Photo))


然后执行
cmd.ExecuteNonQuery();
报错提示这样的:


求解决啊。。

为什么DBNull.Value 回事nvarchar类型呢?

接触C#不久啊
...全文
285 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
softneo 2013-04-30
  • 打赏
  • 举报
回复
引用 10 楼 unicorn_dsx 的回复:
if(Photo==null) { Photo=new byte[1] }
看过类型的方法,这个存到数据库是0x(貌似是,忘了)。Photo是可以为null,0x就不是null啊,不爽~
softneo 2013-04-30
  • 打赏
  • 举报
回复
引用 12 楼 dr592112441 的回复:
image 类型的 为什么要插string FileStream fs = new FileStream(); .. 进行读取在插入 建议还是用String 都路径 也方便
类型是byte[]不是string,报错是nvarchar与Image不兼容。 只有Photo为null才会这样。
softneo 2013-04-30
  • 打赏
  • 举报
回复
引用 7 楼 li12403074 的回复:
貌似是数据库的类型nvarchar,和你要存的图片保存类型byte类型不匹配。 如果是改正方法有下面两个 1。改数据库,把要保存的数据库字段改为能存放byte类型的 2。把你要存的图片只保存路径的方式保存到数据库,不过这个要改的代码不较多,还要将图片上传到服务端。 方法2只是对于.net适用。如果只是想保存图片,那就改数据库吧。
1、数据库字段已经是byte,就是Image类型。 2、图片不多,没必要存路径。
bidisty 2013-04-30
  • 打赏
  • 举报
回复
4.为什么DBNull.Value 回事nvarchar类型呢? 应该是: public SqlParameter( string parameterName, Object value ) 当在 value 参数中指定 Object 时,SqlDbType 将从 Object 的 .NET Framework 类型推断出。 你现在的值是DBNull.Value,那么类型推断不出来,那么使用默认值为 NVarChar。
bidisty 2013-04-30
  • 打赏
  • 举报
回复
3. SqlParameter parameter = new SqlParameter("@Photo", SqlDbType.Image); parameter.Value = SqlHelper.GetNull(emp.Photo); command.Parameters.Add(parameter); 差不多就这样了,没环境,自己调试吧。
bidisty 2013-04-30
  • 打赏
  • 举报
回复
public static object GetNull(object value) { if (value == null) { return DBNull.Value; //返回 } else { return value; } } 1.DBNull.Value开辟了空间,但"值"为空 2.value 连空间都没有,你还没有实例一个空间给它赋值什么值
Mirror然 2013-04-27
  • 打赏
  • 举报
回复
image 类型的 为什么要插string FileStream fs = new FileStream(); .. 进行读取在插入 建议还是用String 都路径 也方便
Kim_Du 2013-04-27
  • 打赏
  • 举报
回复
设置参数的类型为Image
xixihaha_2011_098 2013-04-27
  • 打赏
  • 举报
回复
if(Photo==null) { Photo=new byte[1] }
xixihaha_2011_098 2013-04-27
  • 打赏
  • 举报
回复
Photo=new byte[1]
艾伦图灵 2013-04-27
  • 打赏
  • 举报
回复

if (Photo != null)
                cmd.Parameters.Add("@Photo", System.Data.SqlDbType.Image).Value = Photo;
            else
                cmd.Parameters.Add("@Photo", System.Data.SqlDbType.Image).Value = System.DBNull.Value;
li12403074 2013-04-27
  • 打赏
  • 举报
回复
貌似是数据库的类型nvarchar,和你要存的图片保存类型byte类型不匹配。 如果是改正方法有下面两个 1。改数据库,把要保存的数据库字段改为能存放byte类型的 2。把你要存的图片只保存路径的方式保存到数据库,不过这个要改的代码不较多,还要将图片上传到服务端。 方法2只是对于.net适用。如果只是想保存图片,那就改数据库吧。
苍穹无痕 2013-04-27
  • 打赏
  • 举报
回复
你的Photo在数据库中是默认为非空的吗?如果不是的话,可以不更新这个字段,更新其他字段就可以了。
softneo 2013-04-27
  • 打赏
  • 举报
回复
引用 4 楼 ayouxinping 的回复:
空值可以不赋值。也就没必要保存到数据库中。
没给emp.Photo赋值就是null啊,但是这个null数据库不认啊。 所以用DBNull.Value,但是却报错。。
苍穹无痕 2013-04-27
  • 打赏
  • 举报
回复
空值可以不赋值。也就没必要保存到数据库中。
softneo 2013-04-27
  • 打赏
  • 举报
回复
再说,我的emp.Photo要赋值的
softneo 2013-04-27
  • 打赏
  • 举报
回复
引用 1 楼 baishi1987 的回复:
new SqlParameter("@Photo", SqlHelper.GetNull(emp.Photo)),改为Convert.DBNull
怎么改啊? new SqlParameter("@Photo", Convert.DBNull) 这样? 同样报那个错误。。
baishi1987 2013-04-27
  • 打赏
  • 举报
回复
new SqlParameter("@Photo", SqlHelper.GetNull(emp.Photo)),改为Convert.DBNull

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧