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

原创 2007年09月30日 01:14:00
异常详细信息:   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;
    
}

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






 

 

 

 

 

相关文章推荐

Matlab主要函数与命令、程序实例

  • 2011年07月02日 18:34
  • 511KB
  • 下载

主要推荐系统算法总结及Youtube深度学习推荐算法实例概括

主要推荐系统算法总结及Youtube深度学习推荐算法实例概括 By ZhuZhiboSmith2017年7月09日 17:00 现如今,许多公司使用大数据来做超级相关推荐,并以此来增加...

【IO流】IO流基本定义及最简单的实例输入,输出总结【主要是针对字符流】

/* 我们来看一下字符流的特点 既然IO流是用于操作数据的,我们先来看比较直观的操作,那就是对文件的操作! 下面以演示文件为主来操作 基本需求:在硬盘上,创建一个文件并写入一些基本的文字数据 最终...

Hbase结合echart.js实例主要代码

  • 2015年05月06日 15:22
  • 30KB
  • 下载

Webkit for android java层主要类库关系及浏览器实例讲解

Webkit forandroid的主要框架 第一 安卓4.4  以前的框架
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1.主要是引用没有实例为空所造成的。
举报原因:
原因补充:

(最多只允许输入30个字)