C#执行executescalar()方法无结果时如何处理

时间:2021-07-29 22:51:20

//统计各个收支项目的和
        public double GetTongji(string str,string year,string month)
        {
            SqlConnection conn = DBHelper.connection;
            string strSql = string.Format("select sum(consumemoney) from consume where category='{0}' and consumedate like '{1}-{2}-%'", str,year,month);
            SqlCommand com=new SqlCommand(strSql,conn); 
            conn.Open();
            double tongji = Convert.ToDouble(com.ExecuteScalar());
            return tongji;           
            conn.Close();
           
        }

当从数据库里查询的结果为空时就会提示“对象不能从 DBNull 转换为其他类型”。我想做的是怎么用一个if语句,当返回为空的时候,就弹出窗口提示查询为空,而不是报错导致程序不能运行。哪位大虾帮忙改一下代码,解释一下ExecuteScalar()返回的是什么类型的值。

10 个解决方案

#1


'{1}_{2}_%'

int tongji=(int)com.ExecuteScalar();

#2


在异常中进行处理啊,在里面写成你想要的效果。

#3


捕获异常

#4


引用 1 楼 dongrisen 的回复:
'{1}_{2}_%'

int tongji=(int)com.ExecuteScalar();

当返回为空的时候就会提示无法将DBNULL类型转换为int型

#5


try catch啊 当ExecuteScalar方法返回值为空,转double类型的时候就会出现异样,再catch模块里就可以返回0了啊

#6


object o=com.ExecuteScalar() ;
if(o is DBNull){
//执行操作
}
else
{
return Convert.toDouble(o);
}

#7


引用 6 楼 sainmars 的回复:
object o=com.ExecuteScalar() ;
if(o is DBNull){
//执行操作
}
else
{
return Convert.toDouble(o);
}

这个正解!
也可以用异常:

double tongji=0;
try{
  tongji = Convert.ToDouble(com.ExecuteScalar());
}catch{}
return tongji;


C#执行executescalar()方法无结果时如何处理我正在使用《Csdn收音机》第一时间获取最新动态!

#8


ExucuteScalar()返回的是object类型的,
你的功能:
  public double GetTongji(string str,string year,string month)
        {
            SqlConnection conn = DBHelper.connection;
            string strSql = string.Format("select sum(consumemoney) from consume where category='{0}' and consumedate like '{1}-{2}-%'", str,year,month);
            SqlCommand com=new SqlCommand(strSql,conn); 
            conn.Open();
            object result = com.ExecuteScalar();
            if(result!=null){
             conn.Close();
             return Convert.ToDouble(com.ExecuteScalar()); 
            } 
            else
                MessageBox.Show("没有记录!");
            conn.Close();
            return 0d;
           
        }

#9


ExecuteScalar()返回结果集中第一行的第一列,就是你select xx from table其中xx在表里面是什么类型就返回什么类型的。
解决办法:
在输出之前判断
if(com.ExecuteScalar()==DBNull)
{
MessageBox.Show("查询为空");
//给它一个某认值
com.ExecuteScalar()=0;
}
double tongji = Convert.ToDouble(com.ExecuteScalar());

#10


更正下,我这里说的ExecuteScalar()返回类型应该指数据库字段对象类型,调用它必须强制转换你需要的类型。

#1


'{1}_{2}_%'

int tongji=(int)com.ExecuteScalar();

#2


在异常中进行处理啊,在里面写成你想要的效果。

#3


捕获异常

#4


引用 1 楼 dongrisen 的回复:
'{1}_{2}_%'

int tongji=(int)com.ExecuteScalar();

当返回为空的时候就会提示无法将DBNULL类型转换为int型

#5


try catch啊 当ExecuteScalar方法返回值为空,转double类型的时候就会出现异样,再catch模块里就可以返回0了啊

#6


object o=com.ExecuteScalar() ;
if(o is DBNull){
//执行操作
}
else
{
return Convert.toDouble(o);
}

#7


引用 6 楼 sainmars 的回复:
object o=com.ExecuteScalar() ;
if(o is DBNull){
//执行操作
}
else
{
return Convert.toDouble(o);
}

这个正解!
也可以用异常:

double tongji=0;
try{
  tongji = Convert.ToDouble(com.ExecuteScalar());
}catch{}
return tongji;


C#执行executescalar()方法无结果时如何处理我正在使用《Csdn收音机》第一时间获取最新动态!

#8


ExucuteScalar()返回的是object类型的,
你的功能:
  public double GetTongji(string str,string year,string month)
        {
            SqlConnection conn = DBHelper.connection;
            string strSql = string.Format("select sum(consumemoney) from consume where category='{0}' and consumedate like '{1}-{2}-%'", str,year,month);
            SqlCommand com=new SqlCommand(strSql,conn); 
            conn.Open();
            object result = com.ExecuteScalar();
            if(result!=null){
             conn.Close();
             return Convert.ToDouble(com.ExecuteScalar()); 
            } 
            else
                MessageBox.Show("没有记录!");
            conn.Close();
            return 0d;
           
        }

#9


ExecuteScalar()返回结果集中第一行的第一列,就是你select xx from table其中xx在表里面是什么类型就返回什么类型的。
解决办法:
在输出之前判断
if(com.ExecuteScalar()==DBNull)
{
MessageBox.Show("查询为空");
//给它一个某认值
com.ExecuteScalar()=0;
}
double tongji = Convert.ToDouble(com.ExecuteScalar());

#10


更正下,我这里说的ExecuteScalar()返回类型应该指数据库字段对象类型,调用它必须强制转换你需要的类型。