2

我在VB .Net中遇到错误

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

你能告诉我这个错误的原因是什么吗?

4

9 回答 9

10

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

在代码文件类型的顶部:

Option Strict On
Option Explicit On
于 2008-09-25T01:47:36.230 回答
7

让我们解构错误消息。

“对象引用”是指您在代码中使用的引用对象的变量。对象变量可能已由您声明,或者您可能只是使用在另一个对象中声明的变量。

“对象实例”表示对象是空白的(或者在 VB 中说“ Nothing ”)。当您处理对象变量时,您必须在引用它之前创建该对象的实例

“未设置为”意味着您尝试访问一个对象,但其中没有任何内容可供计算机访问。

如果您创建一个变量,例如

Dim aPerson as PersonClass

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

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

Dim aPerson as New PersonClass

如果您希望能够通过以下方式测试对象是否“无”

If aPerson Is Nothing Then
    aPerson = New PersonClass
End If

希望有帮助!

于 2011-07-13T14:57:36.593 回答
5

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

编辑:添加代码格式化标签...

于 2008-09-25T02:32:52.970 回答
2

通常,在 .NET 运行时,每当取消引用未分配或已分配值的变量Nothing(在 VB.Net 中,null在 C# 中)时,就会发生这种情况。

Option Strict On并将Option 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是“对象引用未设置为对象实例”的来源。

于 2008-09-25T02:03:47.830 回答
2

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

Dim result As String = SqlCommand.ExecuteScalar()   'just for scope'
If result Is Nothing OrElse IsDBNull(result) Then
    'no result!'
End If
于 2008-09-25T02:34:01.017 回答
1

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

于 2008-09-25T02:24:03.677 回答
1

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

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

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

于 2008-09-25T02:38:25.983 回答
0

好吧,错误正在解释自己。由于您没有提供任何代码示例,我们只能在您的代码中的某处说,您正在为某些任务使用 Null 对象。我在下面的代码示例中遇到了同样的错误。

Dim cmd As IDbCommand
cmd.Parameters.Clear()

如您所见,我将清除 Null 对象。为此,我收到错误

“你调用的对象是空的”

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

于 2018-04-23T11:30:49.873 回答
0

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

于 2020-05-22T06:47:39.650 回答