//统计各个收支项目的和
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();
int tongji=(int)com.ExecuteScalar();
#2
在异常中进行处理啊,在里面写成你想要的效果。
#3
捕获异常
#4
当返回为空的时候就会提示无法将DBNULL类型转换为int型
#5
try catch啊 当ExecuteScalar方法返回值为空,转double类型的时候就会出现异样,再catch模块里就可以返回0了啊
#6
object o=com.ExecuteScalar() ;
if(o is DBNull){
//执行操作
}
else
{
return Convert.toDouble(o);
}
if(o is DBNull){
//执行操作
}
else
{
return Convert.toDouble(o);
}
#7
这个正解!
也可以用异常:
double tongji=0;
try{
tongji = Convert.ToDouble(com.ExecuteScalar());
}catch{}
return tongji;
我正在使用《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;
}
你的功能:
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());
解决办法:
在输出之前判断
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();
int tongji=(int)com.ExecuteScalar();
#2
在异常中进行处理啊,在里面写成你想要的效果。
#3
捕获异常
#4
当返回为空的时候就会提示无法将DBNULL类型转换为int型
#5
try catch啊 当ExecuteScalar方法返回值为空,转double类型的时候就会出现异样,再catch模块里就可以返回0了啊
#6
object o=com.ExecuteScalar() ;
if(o is DBNull){
//执行操作
}
else
{
return Convert.toDouble(o);
}
if(o is DBNull){
//执行操作
}
else
{
return Convert.toDouble(o);
}
#7
这个正解!
也可以用异常:
double tongji=0;
try{
tongji = Convert.ToDouble(com.ExecuteScalar());
}catch{}
return tongji;
我正在使用《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;
}
你的功能:
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());
解决办法:
在输出之前判断
if(com.ExecuteScalar()==DBNull)
{
MessageBox.Show("查询为空");
//给它一个某认值
com.ExecuteScalar()=0;
}
double tongji = Convert.ToDouble(com.ExecuteScalar());
#10
更正下,我这里说的ExecuteScalar()返回类型应该指数据库字段对象类型,调用它必须强制转换你需要的类型。