解决方案 »
- 初学 C# 求问 控制台程序为啥运行之后闪一下就消失
- 一个关于tabcontrol的问题,希望高手帮忙解决
- 通过ENTER键,使焦点到datagridview的下一个单元格中?
- 这个表达式该怎么写
- backgroundWorker使用问题
- [WinForm] DataGirdView嵌套复选框选中问题...
- SQL Express 2005附加不了数据库文件
- 有谁有面向Agent编程的经验,请快进来(在线等待)
- C# 尝试读取或写入受保护内存。这通常指示其他内存已损坏
- 两个类相互访问问题!
- WinForm客户端怎样通过浏览器代理跟服务器间的相互数据传输(类似QQ的那种)
- C#提取word带合并单元格表格
SqlParameter param=new SqlParameter("@Photo")",emp.Photo==DBNull.Value ? null:emp.Photo);
param.SqlDbType = SqlDbType.Image;ExecuteNonQuery("insert into Employee(Photo) values(@Photo)",param);
你是看传智播客的视频吧?我也遇到这样个情况,你现在解决了吗?实在找不到方法,只好判断Image不能为null。
ExecuteNonQuery("insert into Employee(Photo) values(@Photo)",new SqlParameter("@Photo",emp.Photo));
当执行插入语句,emp.Photo的值为DBNull.Value时提示:操作数类型冲突: nvarchar 与 image 不兼容;这其实是没有指定DbType的原因。大部分情况下,使用SqlParameter的时候不需要指定参数的数据类型(DbType或者SqlDbType),ADO.Net会根据value的类型来自动判断出数据类型,即使ADO.Net不能判断出来,SQLServer数据库服务器也能进行大部分的判断(当然会损失一些性能)。
但是对于这个程序中的Image类型就没那么幸运了,如果不指定DbType,而恰好数据又为Null/DbNull的时候,ado.net就把数据类型识别成为了nvarchar,就出现了上面的错误了。因此只要指定DbType或者SqlDbType即可。下面的代码成功运行:
SqlHelper.ExecuteNonQuery("insert into T_Persons(Name,Photo) values(@Name,@Photo)", new SqlParameter("@Name", "itcast"),
new SqlParameter("@Photo", SqlDbType.Image) { Value=DBNull.Value});因此以后不要偷懒了,还是每次都老老实实的指定数据类型吧。