運行環境:w2k(繁體)+NET Framework 1.1 Service Pack 1(KB867460-X86)-tw+vs.net2003(繁體)+CrystalReport10this.lbl96Lessen.Text=this.myDataSet.Tables[this.myDataMember].Compute("count(empl_NewMon)","empl_NewMon=96").ToString();
this.lblOldMon.Text=Convert.ToInt64(this.myDataSet.Tables[this.myDataMember].Compute("sum(empl_OldMon)","")).ToString();
當this.myDataSet.Tables[this.myDataMember].Rows.Count>0的情況下,以上代碼沒有問題;
當this.myDataSet.Tables[this.myDataMember].Rows.Count>0的情況下,以上的第二行(Sum函數)代碼出現錯誤"物件不可以從DBNull轉換成其它型別",在沒有行的情況下,還sum什么,而count又沒有問題,這是程序本身的Bug嗎?

解决方案 »

  1.   

    你的sum()  是函数吗??   怎么看上去想是个字符串
    "sum(empl_OldMon)"
      

  2.   

    this.myDataSet.Tables[this.myDataMember].Rows.Count=0时
    注意这时count就是=0
    这时要不报错就直接写sum(empl_OldMon)=0,ok!
      

  3.   

    Convert.ToInt64(this.myDataSet.Tables[this.myDataMember].Compute("sum(empl_OldMon)","")).ToString();
    改成这样看看:
    object sum = this.myDataSet.Tables[this.myDataMember].Compute("sum(empl_OldMon)",""));if( sum != null )
    {
      this.lblOldMon.Text=sum.ToString();}
      

  4.   

    if( sum != DBNull.Value )??
    {
      this.lblOldMon.Text=sum.ToString();}
    看看这样报错不
      

  5.   

    maotin(liu) :
    你的這條語句
    object sum = this.myDataSet.Tables[this.myDataMember].Compute("sum(empl_OldMon)",""));
    都會出錯
      

  6.   

    首先判断,table里行有没有值,其次在看看行里面empl_OldMon这个字段,是不是取出的数据是不是都有值,有可能取出来得是空值,
    应该在sql语句里加一个处理,IsNull(empl_OldMon,0) AS empl_OldMon
      

  7.   

    樓上的,我知道該如何處理,我是想知道,這是否是一個bug?
    各位在編程中是否有遇到過?
      

  8.   

    抱歉,是由于在沒有記錄時,將空值來轉換成Int64時出錯;正確的代碼如下;
    object oldMon=this.myDataSet.Tables[this.myDataMember].Compute("sum(empl_OldMon)","IsNull(empl_OldMon,0)>0");
    object newMon=this.myDataSet.Tables[this.myDataMember].Compute("sum(empl_NewMon)","IsNull(empl_NewMon,0)>0");
    if(oldMon!=DBNull.Value)
    this.lblOldMon.Text=Convert.ToInt64(oldMon).ToString();
    else
    this.lblOldMon.Text="0";
    if(newMon!=DBNull.Value)
    this.lblOldMon.Text=Convert.ToInt64(newMon).ToString();
    else
    this.lblNewMon.Text="0";