向数据表添加System.DBNull.Value的问题(附代码)
StringBuilder strsql = new StringBuilder();strsql.Append("insert into YouHui_Product(YPyouHuiID,YPproductID,YPproductUnitPrice) values (");
strsql.AppendFormat("'{0}',", youHui_Product.YPyouHuiID);
strsql.AppendFormat("{0},", youHui_Product.YPproductID);
strsql.AppendFormat("{0})", youHui_Product.YPproductUnitPrice.HasValue ?youHui_Product.YPproductUnitPrice : System.DBNull.Value);
错误提示: 无法确定条件表达式的类型,因为“double?”和“System.DBNull”之间没有隐式转换
(我的youHui_Product.YPproductUnitPrice是doublue?类型的,如果为null则向表中插入System.DBNull.Value字段,就这意思,怎么解决上面的错误??) --------------------编程问答-------------------- 可空类型是允许给值类型分配null值
这样写吧
youHui_Product.YPproductUnitPrice.HasValue ?youHui_Product.YPproductUnitPrice : null --------------------编程问答-------------------- System.DBNull.Value是用来判断从数据库中取出的值是不是空值。System.DBNull.Value是数据库的null,和c#里的null是不一样的。楼上的写易做图确 --------------------编程问答--------------------
我最开始也是这么写的,但转换成insert 语句的时候又有一个问题 .比如果第三个属性象你说的表示成
youHui_Product.YPproductUnitPrice.HasValue ?youHui_Product.YPproductUnitPrice : null;那么转换的sql语句就是这样的(请注意看第三个参数是,,):
insert into YouHui_Product(YPyouHuiID,YPproductID,YPproductUnitPrice) values ('1',1,,); 这样无法插入的。 --------------------编程问答-------------------- strsql.AppendFormat("{0})", youHui_Product.YPproductUnitPrice.HasValue ?youHui_Product.YPproductUnitPrice : "null"); --------------------编程问答-------------------- 你使用strsql.AppendFormat("{0})"处理,看成是字符串了,当然是不行的,你需要改变你的方法,使用
SqlCommand.Parameters.Add是很好的做法 --------------------编程问答-------------------- 建议带参数的SQL操作使用SqlCommand的Parameters,可以解决你的问题
如:
if(ouHui_Product.YPproductUnitPrice.HasValue)
{
cmd.Parameters.AddWithValue("@YPproductUnitPrice", youHui_Product.YPproductUnitPrice);
}
else
{
cmd.Parameters.AddWithValue("@YPproductUnitPrice", System.DBNull.Value);
} --------------------编程问答--------------------
我youHui_Product.YPproductUnitPrice的类型是double?的,"null"不能行吧?
补充:.NET技术 , ASP.NET