未将对象引用设置到对象的实例 解决办法
未将对象引用设置到对象的实例一、网络上的一般说法1、ViewState 对象为 Null。2、DateSet 空。3、sql 语句或 Datebase 的原因导致 DataReader 空。4、声明字符串变量时未赋空值就应用变量。5、未用 new 初始化对象。6、Session 对象为空。7、对控件赋文本值时,值不存在。8、使用 Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值。9、使用 FindControl 时,控件不存在却没有做预处理。10、重复定义造成未将对象引用设置到对象的实例错误. 二、(1)所设置的变量为空值或没有取到值,一般出现在传递参数的时候出现这个问题,也会在使用 DataGrid 或 gridview 或 datalist 等数据控件时出现.(2)控件名称与 codebehind 里面的没有对应(3)未用 new 初始化对象(4)在程序中所引用的控件不存在解决方法:(1)使用 try..catch...finally 捕捉错误,或直接用 response.write()输出所取的变量值(2)查看代码中是否存在未初始化的变量三、SqlConnection.Open 未将对象引用设置到对象的实例在使用 VS2003 开发 ASP.NET 程序时候有时候操作 SqlConnection 对象的 Open()方法时候会出现未将对象引用设置到对象的实例。说明:执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息:System.NullReferenceException:未将对象引用设置到对象的实例。源错误: 。。。。conn.Open();...... 跟踪调试也肯定可以确定对 conn 进行 new 操作但是程序经常在这个地方报错,但是有时候重启服务器或者重启 IIS 有能正常使用了。怎么调试也找不到问题那么这个时候可能是你本机上安装的.NETFRAMEEWORK 框架有问题,可能没有没有安装 SP1.1 补丁需要打 NETFRAMEEWORK1.1SP1 的补丁,到微软官方网站下载安装后就好了。四、一般出现 NullReferenceException 异常的我个人总结有以下情况:1、对象所在的命名空间没有引用2、对象没有实例化3、出现异常,实例化失败对象为 null五、IIS 扛不住的时候,也会出现上面的错误。当应用程序的用户访问量超过它能承受的范围之后,就会出错。改善你的程序,使用缓存,尽量减少与数据库交互的次数。六、我碰到的问题是,无意重置了 DataSet 引用,后出现这个问题,请大家好好查查自己的代码,是不是在其他地方重新引用了,在我的程序中 DataSet 被设置成全局对象。七、当你发现所有的方法不行时,打上.netframework 的补丁八、我出现这个错误,仅仅因为网站里面 DAL 的 dll 文件失效,业务层实例化不了 IDAL 里面的对象但也浪费了一下午的时间在调代码上九、为每个可疑的地方添加监视,起初以为是 sql 语句写错了,查了几遍,换用sql 语句还是报同样的错误。根据 google 出来的结果,提到对象重定义会引起这样的结果。根据这一提示,替换掉页面级全局对象,总算搞定了。classDBOper{ /*构造函数没有函数体**c#写的一系列对数据库操作方法**}最初为了省事,尽量少声明对象,只在全局声明了一个 privateDBOperdb=newDBOper(),在不同方法里面调用该对象的方法,以避免为其定义而造成内存浪费。后来代码重构,在编译的时候并未报错。但是当运行的时候,就出现"NullReferenceException:未将对象引用设置到对象的实例"。结果就因它而搞了几个小时。后来根据 google 的结果,将不同方法中使用到的 DBOper 对象一一重定义为局部变量(一个方法里面只定义一个 DBOper 对象,多次调用其方法均正常),去掉全局的 private 变量。再运行的时候就正常了。至于为什么将自定义的对象提成为class为private在不同的方法里面使用后而出现这样的问题,现在还不是很清楚解决办法出现“未将对象引用设置到对象的实例” 错误,一般是下面的原因:1、ViewState 对象为 Null。2、DateSet 为空。3、sql 语句或 Datebase 的原因导致 DataReader 空。4、声明字符串变量时未赋空值就应用变量。5、未用 new 初始化对象。6、Session 对象为空。7、对控件赋文本值时,值不存在8、使用 Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值9、使用 FindControl 时,控件不存在却没有做预处理10、重复定义造成未将对象引用设置到对象的实例错误很多时候在运行程序时,会出现“未将对象引用设置到对象的实例”这样的提示信息,主要是在代码中重复定义了造成的,只要将其中一个删除就可以了。第一种:重复定义造成未将对象引用设置到对象的实例错误一般在 C#中造成“未将对象引用设置到对象的实例”错误都是控件名称与 codebehind 里面的没有对应,对于初学编程的人,而在编码中重复定义也会造成这种问题的产生。以下是一个例子:using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;namespace weste{ public class study : System.Web.UI.Page{ public string[] c;private void Page_Load(object sender, System.EventArgs e){ aaa();bbb();}private void aaa(){ string[] c=new string[3];//c=new string[3];c[0]="我们";c[1]="西部";c[2]="学习";}private void bbb(){ Response.Write(c[0]+c[1]+c[2]);}#region Web 窗体设计器生成的代码override protected void OnInit(EventArgs e){ InitializeComponent();base.OnInit(e);}private void InitializeComponent(){ this.Load += new System.EventHandler(this.Page_Load);}#endregion}}运行后会我们发现,会有以下错误产生:异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:行 33: private void bbb()行 34: { 行 35: Response.Write(c[0]+c[1]+c[2]);行 36: }行 37:很多初学者都会有疑问:我已经定义了变量 public string[] c,而且也进行了实例化 string[] c=new string[3],但是为什么在调用数组 c 的时候还会报“未将对象引用设置到对象的实例”的错误呢?问题出在 string[] c=new string[3]这里,在前面已经将数组 c 定义后,在函数 aaa()中再次将数组定义,造成前面定义的数组不能实例化。只需要将 string[] c=new string[3]修改成 c=new string[3] 即可。第二种:空对象引用导致错误1。控件不存在。2。执行权限不够。加 ASPNET 和 EVETRYONE 所有权限。1、ViewState 对象为 Unll。2、DateSet 空。3、sql 语句或 Datebase 的原因导致 DataReader 空。4、声明字符串变量时未赋空值就应用变量。5、未用 new 初始化对象。6、Session 对象为空。