未将引用设置到对象的实例

作者:45°仰望星空
撰写时间: 2019年8月16日
下面给大家讲一个在C#中可能会出现的一个问题,出现的问题是“未将引用设置到对象的实例”的错误,我们可以来看看这图提示的错误:
在这里插入图片描述
一、出现一般这样的问题出现会有以下几种原因:

  1. ViewState对象为Null
  2. DateSet为空
  3. SQL语句或Datebase的原因导致DateReader为空
  4. 声明字符串变量时未赋空值就应用变量
  5. 未用new对象为空
  6. 对控件赋文本值时,值不存在
  7. Session对象为空
  8. 使用Request.QueryString()是,所获取的对象不存在,或值为空时未赋初始值
  9. 使用FindControl时,控件不存在却没有做预处理
  10. 重复定义造成为将对象引用设置到对象的实例错误

二、所设置的变量为空值或没有取到值

  1. 一般出现在传递参数的时候这个问题,也会在使用DataGrid或GridView或datalist等数据控件时出现。
  2. 控件名称与codebehind里面的没有对应
  3. 未用new初始化对象
  4. 在程序中所引用的控件不存在

解决方法:

  1. 使用try.catchfinally捕捉错误,或直接用response.write()输出所取的变量值
  2. 查看代码中是否存在未初始化的变量

三、SqlConnection.Open未将对象引用设置到对象的实例在使用VS2003开发ASP.NET程序时候有时候操作SqlConnection对象的Open()方法时候会出现未将对象引用设置到对象的实例。说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。源错误…conn.Open();跟踪调试也肯定可以确定对conn进行new操作但是程序经常在这个地方报错,但是有时候重启服务器或者重启IIs有能正常使用了。怎么调试也找不到问题那么这个时候可能是你本机上安装的.NETFRAMEEWORK框架有问题,可能没有安装SP1.1补丁需要打NET转载自百分网,请保留此标记FRAMEEWORK1.1SP1的补丁,到微软官方网站下载安装后就可以了。

四、一般出现NullReferenceException异常的我个人总结有以下情况:

  1. 对象所在的命名空间没有引用
  2. 对象没有实例化
  3. 出现异常,实例化失败对象为null

五、IIS扛不住的时候,也会出现上面的错误。当应用程序的用户访问量超过它能承受的范围之后,就会出现错误,改善你的程序,使用缓存,尽量减少与数据库交互的次数

六、我碰到的问题是,无意重复了DataSet引用,后出现这个问题,请大家好好查看自己的代码。是不是在其他地方重新引用了,在我的程序中DataSet被设置成全局对象

七、当你发现所有的方法不行时,打上.netframework的补丁

八、我出现这个错误,仅仅因为网站里面DAL的dll文件失效,业务层实例化不了IDAL里面的对象但也浪费了一下午的时间在调试

九、为每个可疑的地方添加监视,起初以为是SQL语句写错了,查了几遍,换用SQL语句还是报同样的错误。根据Google出来的结果,提到对象重定义会引起这样的结果。根据这一提示,替换掉页面级全局对象,总算搞定了。classDBOper{构造函数没有函数体****C#写的一系列对数据库操作方法**}最初为了省事,尽量少声明对象,只在全局声明了一个privateDBOperdb=newDBOer(),在不同方法里面调用该对象的方法,以避免为其定义而造成内存浪费。后来代码重构,在编译的时候并未报错。但是当运行的时候,就出现“NullReferenceException:未将对象引用设置到对象的实例”。结果就因它而搞了几个小时。后来根据Google的结果,将不同方法中使用到的DBOper对象——重定义为局部变量(一个方法里面只定义一个DBOper对象,多次调用其方法均正常),去掉全局的private变量。再运行的时候就正常了。至于为什么将自定义的对象提成为class为private在不同的方法里面使用后而出现这样的问题,现在还不是很清楚。参考资料:网络

已标记关键词 清除标记
对象引用设置对象实例。 说明: 执行当前 Web 请求期间,出现经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 对象引用设置对象实例。 源错误: 行 20: string userName = StrHelper.ConvertSql(UserName.Text.ToString()); 行 21: string userPwd = StrHelper.EncryptPassword(PassWord.Text.ToString(), StrHelper.PasswordType.MD5); 行 22: if (bs.isLoginValidate(userName, userPwd)) 行 23: { 行 24: 源文件: d:\wgm\vs\text\web\Login.aspx.cs 行: 22 堆栈跟踪: [NullReferenceException: 对象引用设置对象实例。] Leyp.SQLServerDAL.UserDAL.isExistsUserName(String UserName) in C:\Users\yuqin\Desktop\Leyipai\SQLServerDAL\UserDAL.cs:181 Leyp.SQLServerDAL.UserDAL.isLoginValidate(String UserName, String PassWord) in C:\Users\yuqin\Desktop\Leyipai\SQLServerDAL\UserDAL.cs:207 Login.LoginButton_Click(Object sender, ImageClickEventArgs e) in d:\wgm\vs\text\web\Login.aspx.cs:22 System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +115 System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +120 System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563 #**_在这里分享一下我这问题的原因:是因为我的数据库表不全。希望能帮到后来人。_**#
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页