关于"作数类型冲突: nvarchar 与 image 不兼容"的问题(DBNull)
2014-04-11 15:18
363 查看
关于"作数类型冲突: nvarchar 与 image 不兼容"的问题(DBNull)
分类: .NET2013-07-31 12:46 72人阅读 评论(0) 收藏 编辑 删除
ADO.NET.NET
有学生在看传智播客的免费“.Net人事管理系统开发”视频教程(http://net.itcast.cn/subject/rsgl/index.html
)的时候遇到下面的问题:
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});
因此以后不要偷懒了,还是每次都老老实实的指定数据类型吧。
相关文章推荐
- 关于"作数类型冲突: nvarchar 与 image 不兼容"的问题(DBNull)
- 关于Entity Framework更新的几种方式以及可能遇到的问题(附加类型“Model”的实体失败,因为相同类型的其他实体已具有相同的主键值)在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为
- 关于css未被载入问题--->因为它的 MIME 类型 "text/html" 不是 "text/css"。
- "const char*"类型的实参与LPCTSTR类型的形参不兼容问题
- "const char *" 类型的实参与 "LPCTSTR" 类型的形参不兼容(即_T、TEXT("")和L"" 的问题)
- 操作数类型冲突: nvarchar 与 image 不兼容
- 关于phpMyAdmin出现"#2000 无法登录 MySQL 服务器"的问题
- 附加类型“UniversalReviewSystem.Models.ApplicationUser”的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值
- "Chinese_PRC_CI_AS" 和 "Chinese_PRC_90_CI_AI" 之间的排序规则冲突问题
- 贝叶斯定理-----"由果溯因"类型问题的启发
- 关于phpMyAdmin出现"#2000 无法登录 MySQL 服务器"的问题
- vsftp关于"550 create directory operation failed"问题解决
- 关于List l1 = new LinkedList();报错:不兼容的类型的问题的解决
- 提交表单,有两个页面,一个是系统日志,一个是运行日志,其中日志类型不能用同一个"name",否则其中一个会出现404页面,可能是缓存问题吧(API?)
- IntelliSense: "const char *" 类型的实参与 "LPCTSTR" 类型的形参不兼容
- "?:"运算符类型转换问题
- 关于用VS写C程序运行时出现"烫"字以及乱码的问题的原因
- 关于“服务器提交了协议冲突. Section=ResponseStatusLine"问题
- 关于Android4.0 emulator-arm.exe-应用程序错误,内存不能为"read"问题解决方法
- 关于“服务器提交了协议冲突. Section=ResponseStatusLine"问题请