对象引用未设置为对象的实例

时间:2008-09-25 01:46:40

标签: vb.net

我在VB.net中遇到错误“对象引用没有设置为对象的实例”。你能告诉我这个错误的原因是什么吗?感谢..

9 个答案:

答案 0 :(得分:9)

该对象在使用前尚未初始化。

在代码文件的顶部输入:

Option Strict On
Option Explicit On

答案 1 :(得分:4)

让我们解构错误信息。

“对象引用”表示您在代码中使用的引用对象的变量。您可以声明对象变量,或者您可能正在使用在另一个对象中声明的变量。

“对象的实例”表示对象为空(或在VB中说“ Nothing ”)。处理对象变量时,必须先创建该对象的实例,然后再引用它。

“未设置为”表示您尝试访问某个对象,但其中没有任何内容供计算机访问。

如果你创建一个像

这样的变量
Dim aPerson as PersonClass

你所做的只是告诉编译器aPerson代表一个人,而不是 代表 的人。

您可以使用“新建”关键字创建对象的空白副本。例如

Dim aPerson as New PersonClass

如果您希望能够通过

测试该对象是否“无”
If aPerson Is Nothing Then
    aPerson = New PersonClass
End If

希望有所帮助!

答案 2 :(得分:2)

通常,在.NET运行时,只要取消分配或赋值Nothing(在VB.Net中,在C#中为null)的变量被取消引用,就会发生这样的事情。

Option Strict OnOption Explicit On将帮助检测可能发生这种情况的实例,但是可以从另一个函数调用中获取null / Nothing:

Dim someString As String = someFunctionReturningString();
If ( someString Is Nothing ) Then
   Sysm.Console.WriteLine(someString.Length); // will throw the NullReferenceException
End If

并且NullReferenceException是“未设置为对象实例的对象引用”的来源。

答案 3 :(得分:2)

SEF, 如果问题出在数据库返回结果上,我认为是在这种情况下:

   dsData = getSQLData(conn,sql, blah,blah....)
   dt = dsData.Tables(0)  'Perhaps the obj ref not set is occurring here

解决这个问题:

  dsData = getSQLData(conn,sql, blah,blah....)
   If dsData.Tables.Count = 0 Then Exit Sub
   dt = dsData.Tables(0)  'Perhaps the obj ref not set is occurring here

修改:添加了代码格式标记...

答案 4 :(得分:2)

如果您认为在没有从数据库查询返回数据时发生这种情况,那么您可能应该在对其进行操作之前测试结果吗?

Dim result As String = SqlCommand.ExecuteScalar()   'just for scope'
If result Is Nothing OrElse IsDBNull(result) Then
    'no result!'
End If

答案 5 :(得分:1)

您可以在应用程序中放置日志记录机制,以便隔离错误原因。 Exception对象具有StackTrace属性,该属性是一个描述调用堆栈内容的字符串,最新的方法调用首先出现。通过查看它,您将获得有关可能导致异常的更多详细信息。

答案 6 :(得分:1)

使用数据库时,如果尝试从不存在的字段或行获取值,则会出现此错误。即如果您正在使用数据集并使用:

Dim objDt as DataTable = objDs.Tables("tablename")

如果数据集中不存在tablename,则会获得对象“引用未设置为对象的实例”。对于数据集中的行或字段也是如此。

答案 7 :(得分:0)

嗯,错误正在解释自己。由于您还没有提供任何代码示例,我们只能在代码中的某处说,您正在使用Null对象执行某项任务。下面的代码示例我得到了相同的错误。

Dim cmd As IDbCommand
cmd.Parameters.Clear()

你可以看到我要清除一个空对象。为此,我收到了错误

  

"对象引用未设置为对象的实例"

在代码中检查代码中的代码。由于您还没有给出代码示例,我们无法突出显示代码:)

答案 8 :(得分:0)

如果您具有class属性和多个构造函数,则必须在所有构造函数中初始化该属性。