1.主要是引用没有实例为空所造成的。

异常详细信息:   System.NullReferenceException:   未将对象引用设置到对象的实例。  

源错误:    


行   
27 :    {  
行   
28:   DataRow   SmallClassName   =DBOperate.GetDataRow("select   *   from   Small_Class   where     SmallClass_ID="+SmallClass_ID,"Small_Class","DBConnection");  
行   
29:   return   SmallClassName["SmallClass_ID"].ToString();  
行   
30:   }
  
行   
31 :   }  
   

源文件:   c:InetpubwwwrootTragramMiniWebTragMiniApp_CodeNavigation.cs         行:   
29     

堆栈跟踪:    


[NullReferenceException:   未将对象引用设置到对象的实例。]  
      TangramMiniWeb.Navigation.GetSmallClassName(Int32   SmallClass_ID)   
in    c:InetpubwwwrootTragramMiniWebTragMiniApp_CodeNavigation.cs: 29   
      TangramMiniWeb.pith.Page_Load(Object   sender,   EventArgs   e)   
in    c:InetpubwwwrootTragramMiniWebTragMini anpith.aspx.cs: 132   
      System.Web.UI.Control.OnLoad(EventArgs   e)   
+ 99   
      System.Web.UI.Control.LoadRecursive()   
+ 47   
      System.Web.UI.Page.ProcessRequestMain(Boolean   includeStagesBeforeAsyncPoint,   Boolean   includeStagesAfterAsyncPoint)   
+ 1061   


它的源码:  


public     static     string      GetBigClassName( int    BigClass_ID)  
{  
DataRow   BigClassName   
=DBOperate.GetDataRow("select   *   from   Big_Class   where   BigClass_ID="+BigClass_ID,"Big_Class","DBConnection");  
                        
return   BigClassName["BigClass_ID"].ToString();  
                 

}
  

public     static     string    GetSmallClassName( int    SmallClass_ID)  
{  
DataRow   SmallClassName   
=DBOperate.GetDataRow("select   *   from   Small_Class   where     SmallClass_ID="+SmallClass_ID,"Small_Class","DBConnection");  
return   SmallClassName["SmallClass_ID"].ToString();-------此句有问题,就是它测试不过去的?????????  
}
  


用到的数据库的表为:  
CREATE   TABLE   [dbo].[Small_Class](  
[SmallClass_Id]   [
int ]   IDENTITY( 1 , 1 )   NOT   NULL,  
[BigClass_Id]   [
int ]   NULL,  
[SmallClass_Name]   [nvarchar](
255 )   COLLATE   Chinese_PRC_CI_AS   NULL,  
[Enable]   [
int ]   NULL,  
[Memo]   [nvarchar](
255 )   COLLATE   Chinese_PRC_CI_AS   NULL  
primary   key   ([SmallClass_Id])  
)  

      
public     static    DataRow   GetDataRow( string    sql,    string    TableName,    string    dbname)  
                
{  

                        SqlConnection   sqlConnection   
=   new   SqlConnection(strCon);  
                        SqlDataAdapter   sqlAdapter1   
=   new   SqlDataAdapter(sql,   sqlConnection);  
                        DataSet   product   
=   new   DataSet();  
                        sqlAdapter1.Fill(product,   TableName);  
                        
return   product.Tables[0].Rows.Count   ==   0   ?   null   :   product.Tables[0].Rows[0];  
                }
  

 

 

 

 

当时求解方法如下:
1 .主要是引用没有实例为空所造成的。
  应该是那个查询语句   select   
*    from   Small_Class    where      SmallClass_ID = " +SmallClass_ID, " Small_Class " , " DBConnection "    返回一个NULL,使得 
DataRow   SmallClassName    =    null了。
我把select   
*    from   Small_Class    where      SmallClass_ID = " +SmallClass_ID放入SQL2005中进行测试,但这个
SmallClass_ID是外来的变量,所以我只能这样写了
delcare @SmallClass_ID 
int  
select   
*    from   Small_Class    where      SmallClass_ID = @SmallClass_ID
结果数据正常,为了再具体点我取了个具体的值 
select   
*    from   Small_Class    where      SmallClass_ID = 1结果出现一行数据。
可以证明我在SQL方面的语句是没有问题的。

2 .SmallClassName可能没有得到值SmallClassName[ " SmallClass_ID " ]就会出错. 
断点看SmallClassName是否能得到值.没得到那就是DBOperate.GetDataRow(...)有问题了.
                SmallClassName 
=  DBOperate.GetDataRow( " select * from Small_Class where  SmallClass_ID= "   +  SmallClass_ID,  " Small_Class " " DBConnection " );
               GetSmallClassName(
1 ) 经过测试发现这使程序进入死循环中,问题为空还没有解决。
我思维回归到了  
public     static    DataRow   GetDataRow( string    sql,    string    TableName,    string    dbname)  
                
{  

                        SqlConnection   sqlConnection   
=   new   SqlConnection(strCon);  
                        SqlDataAdapter   sqlAdapter1   
=   new   SqlDataAdapter(sql,   sqlConnection);  
                        DataSet   product   
=   new   DataSet();  
                        sqlAdapter1.Fill(product,   TableName);  
                        
return   product.Tables[0].Rows.Count   ==   0   ?   null   :   product.Tables[0].Rows
                }

    
这样子就把return   product.Tables[
0 ].Rows.Count    ==     0     ?     null    :   product.Tables[ 0 ].Rows改为原来的
return  product.table[ 0 ].rows.count or
return  product.table[ 0 ].rows.count = 0
return  product.table[ 0 ].rows[ 0 ][ 0 ]
return  product.table[ 0 ].rows[ 0 ]
这样子都不行的。
3 . int  a = return  product.table[ 0 ].row.count
  console.writeline(
" s " );
但这样子也没有返回值。
并那问题依然存在。这种方法也不对。

 

An unhandled exception of type 'System.StackOverflowException' occurred in App_Code.ovf-vfb-.dll
怎么会出现这超出栈的错误呀
那是死循环的原因。
4 .
我的思维再次回到为空的问题上。
代码为:
  
public   static   string  GetSmallClassName( int  SmallClass_ID)
        
{
            

            DATAROW    SmallClassName 
= DBOperate.GetDataRow("select * from Small_Class where  SmallClass_ID=" + SmallClass_ID, "Small_Class""DBConnection");

                
return SmallClassName["SmallClass_ID"].ToString();
        }

既然return SmallClassName[
" SmallClass_ID " ].ToString();为空,那就要判断下SmallClassName是否为空。
DataRow smallClass_ID

 SmallClassName 
=  DBOperate.GetDataRow( " select * from Small_Class where  SmallClass_ID= "   +  SmallClass_ID,  " Small_Class " " DBConnection " );

                
return  SmallClassName[ " SmallClass_ID " ].ToString
这个不这是不行,但只有判断下了


DataRow smallClass_ID
= null ;
 SmallClassName 
=  DBOperate.GetDataRow( " select * from Small_Class where  SmallClass_ID= "   +  SmallClass_ID,  " Small_Class " " DBConnection " );
if (smallClass_ID == null )
{

  
return smallClassName["smallClass_ID"].ToString();
  
}

else
{
   
return null;
    
}

经测试可能达到解决问题的目的






 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值