求助sql语句运行时不是自己写的。。。
本人刚学asp.net,连接sqlserver时查询语句string sql = "select isnull(max(ordernum),0) from tb_test"到运行时就成了 sql = "select Max(ordernum) from tb_test"了。数据库表项查询为空,不能从DBNULL转化为其他类型,本来想为空就给它赋值0的。。。 --------------------编程问答-------------------- 不可能吧...是不是sql下面又重新赋值了 --------------------编程问答-------------------- select Max(ordernum) from tb_test是查询出所有记录ordernum字段的最大值。这个字段是否存在?数据表是否有记录?还有要用cmd.ExecuteScalar()方法执行这条sql语句,然后将返回值转化为int就行了。 --------------------编程问答-------------------- select 0 from tb_test
这个是什么概念啊?
你要把所有列都变成0么? --------------------编程问答-------------------- select 0 from tb_test
这个是什么概念啊?
你要把所有列都变成0么?
--------------------编程问答-------------------- 打个断点调试下。 --------------------编程问答-------------------- 在数据库中查询都对的,本来表是空的,查询结果是单行单列0 ,另外,我把对sql语句的处理改成这样也会报错,DBNULL不能转化为其他类型。
public static int GetScalar(string safeSql)
{
SqlCommand cmd = new SqlCommand(safeSql, Connection);
object obj= cmd.ExecuteScalar();
if(obj == null)
return 0;
else return Convert.ToInt32(obj);
} --------------------编程问答-------------------- obj获得的是DbNull类型,所以判断一下就行了:
if(obj Is DbNull)
return 0; --------------------编程问答-------------------- 注意obj的实际类型,null和DbNull是两种东西。 --------------------编程问答--------------------
Convert.IsDBNull(value) ? null : (int?)value;--------------------编程问答-------------------- select Max(isnull(ordernum,0)) from tb_test 这样子就行了吧,把为Null的转化为0,并且求最大值! --------------------编程问答--------------------
select MAX(ISNULL(ordernum,0)) from tb_test--------------------编程问答-------------------- select MAX(ISNULL(ordernum,0)) from tb_test
--------------------编程问答--------------------
MM很灵活啊,大家都被固定思维禁锢的时候你跳出来了~~ --------------------编程问答-------------------- select Max(isnull(ordernum,0)) from tb_test
正解
--------------------编程问答-------------------- select MAX(ISNULL(ordernum,0)) from tb_test --------------------编程问答-------------------- 还是不对,因为断点调试时,传进数据库的查询语句始终没有isnull这句,直接将isnull(a,b)替换为a
补充:.NET技术 , ASP.NET