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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS中未将对象引用设置到对象的实例相关的知识,希望对你有一定的参考价值。

源错误:

行 21: Client user = (Client)Session["viewstate"];
行 22: SysConnection syscon = new SysConnection();
行 23: array = syscon.GetPublishHI(user.UserName);//获得当前用户已发布房屋的ID号
行 24: Session["array"] = array;
行 25: Session["p"] = p;

源文件: c:\Documents and Settings\XXX\桌面\资料\房屋租赁系统\Main.aspx.cs 行: 23

堆栈跟踪:

[NullReferenceException: 未将对象引用设置到对象的实例。]
Main.Page_Load(Object sender, EventArgs e) in c:\Documents and Settings\XXX\桌面\资料\房屋租赁系统\Main.aspx.cs:23
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +31
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +68
System.Web.UI.Control.OnLoad(EventArgs e) +88
System.Web.UI.Control.LoadRecursive() +74
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3037

初学这个 不知道什么情况 是不是和数据库连接还有关系呢?能解决问题的加分
这是出错页面的源代码
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.htmlControls;
using HouseToLet;

public partial class Main : System.Web.UI.Page

protected void Page_Load(object sender, EventArgs e)

int i = 0;
int j = 0;
int p = 0;
String [] array = new String[10];//存放当前用户已发布房屋的ID号
Client user = (Client)Session["viewstate"];
SysConnection syscon = new SysConnection();
array = syscon.GetPublishHI(user.UserName);//获得当前用户已发布房屋的ID号
Session["array"] = array;
Session["p"] = p;
Session["j"] = j;
Session["i"] = i;

Page_Load方法中代码不多,可以逐行检查哪一行可能会出现空引用。
前四行都是声明不会抛出任何异常,第五行Client user = (Client)Session["viewstate"];这行代码是从Session中读出一个项来然后强制转换为Client。Session["viewstate"]返回很可能是个Null把一个Null转换为Client就会抛出这个异常。

如果上面的转换没有抛出异常,那么可以再往下看到第七行
array = syscon.GetPublishHI(user.UserName);
这里syscon.GetPulichHI使用了上面转换的User累中的某个属性UserName,如果这个UserName为空,或许Syscon.GetPulishHI也会抛出这个空对象异常。

下面的几行代码基本上不会跑出该异常,所以你调试的时候应从这两行查看原因。
参考技术A Client user = (Client)Session["viewstate"];
这句,可能取到的user是null...
参考技术B 二楼正解

未将对象引用设置到对象的实例都可能由哪些原因引起的

一、网络上的一般说法

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补丁

需要打NET转载自百分网http://www.oh100.com,请保留此标记FRAMEEWORK1.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在不同的方法里面使用后而出现这样的问题,现在还不是很清楚.........................

参考资料:网络

来自:求助得到的回答
参考技术A

在.net里面  所有操作的变量都是对象。一般的标示符,如int,string,char等等,最后都会转换为System命名空间下面的类名(如Int32,String,Char等等),当然类实例化的就更不用说了。

对象就必然存在若干的属性和方法。你要操作一个对象,也必然是操作它的属性或者方法。“未将对象引用设置到对象的实例”,也就是说你要调用对象实例里面不存你要操作的属性或者方法,而在确定你的对象里面有你要操作的属性或者方法,但是仍然报错,就多半是你操作的对象变成null了。因为null实际上也是一个对象(Nullable类型),所以它不会提示你“你操作的对象为空”这类的信息,而是对象实例中不存在你要操作的属性或者方法,也就是“未将对象引用设置到对象的实例”。

.NET是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。

.NET就是微软用来实现XML,Web Services,SOA(面向服务的体系结构service-oriented architecture)和敏捷性的技术。对技术人员,想真正了解什么是.NET,必须先了解.NET技术出现的原因和它想解决的问题,必须先了解为什么他们需要XML,Web Services 和 SOA。技术人员一般将微软看成一个平台厂商。

2014年4月的Build开发者大会上,微软宣布开源一批.NET库和相关技术,成立.NET基金会去管理和引导开源组件的开发。微软还将在Apache 2.0许可证下开源Roslyn编译器堆栈,Roslyn是微软所谓的编译器即服务,包含了C#和 Visual Basic.NET 编译器。.NET基金会由来自微软、GitHub和Xamarin的代表组成,Xamarin由GNOME创始人Miguel de Icaza等人创建,开发.NET开源实现。Xamarin向基金会贡献了它的部分库。de Icaza在接受采访时表示,微软已经变了,不仅仅移除了许可证中的限制,而且与Xamarin合作征求设计反馈,在创作共用许可证下发布文档。

参考技术B 首先,你要知道--在.net里面 所有操作的变量都是对象。
一般的标示符,如int,string,char等等,最后都会转换为System命名空间下面的类名(如Int32,String,Char等等),当然类实例化的就更不用说了。
对象就必然存在若干的属性和方法。
你要操作一个对象,也必然是操作它的属性或者方法。

“未将对象引用设置到对象的实例”,也就是说你要调用对象实例里面不存你要操作的属性或者方法,而在确定你的对象里面有你要操作的属性或者方法,但是仍然报错,就多半是你操作的对象变成null了。因为null实际上也是一个对象(Nullable类型),所以它不会提示你“你操作的对象为空”这类的信息,而是对象实例中不存在你要操作的属性或者方法,也就是“未将对象引用设置到对象的实例”。
参考技术C 最根本的原因还是对象是null,没有被new 。
在程序中可能由于不同的地方调用未被初始化的对象。
参考技术D 没new对象或者对象没赋值,要么就是传对象没传进去..

以上是关于VS中未将对象引用设置到对象的实例的主要内容,如果未能解决你的问题,请参考以下文章

提示 未将对象引用设置到对象的实例 怎么处理?

sql未将对象引用设置到对象的实例怎么解决

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

C#连接数据库出现未将对象引用实例

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

求助:EF 未将对象引用设置到对象的实例