【发布时间】:2010-09-12 23:06:18
【问题描述】:
我在 VB .Net 中遇到错误
对象引用未设置为对象的实例。
你能告诉我这个错误的原因是什么吗?
【问题讨论】:
-
如果您可以发布生成此错误的代码文件会很好
-
发布代码,这样我们就不会在黑暗中拍摄了;或者至少描述一下发生了什么!
-
请添加您的代码
标签: vb.net
我在 VB .Net 中遇到错误
对象引用未设置为对象的实例。
你能告诉我这个错误的原因是什么吗?
【问题讨论】:
标签: vb.net
对象在使用前没有被初始化。
在代码文件类型的顶部:
Option Strict On
Option Explicit On
【讨论】:
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
编辑:添加代码格式化标签...
【讨论】:
让我们解构错误信息。
“对象引用”是指您在代码中使用的引用对象的变量。对象变量可能已由您声明,或者您可能只是使用在另一个对象中声明的变量。
"instance of object" 表示对象是空白的(或者在 VB 中,“Nothing”)。当您处理对象变量时,您必须在引用它之前创建该对象的instance。
“未设置为”表示您尝试访问一个对象,但其中没有任何内容可供计算机访问。
如果你创建一个像
这样的变量Dim aPerson as PersonClass
你所做的只是告诉编译器 aPerson 将代表一个人,而不是 what 人。
您可以使用“新建”关键字创建对象的空白副本。例如
Dim aPerson as New PersonClass
如果你希望能够通过测试查看对象是否“无”
If aPerson Is Nothing Then
aPerson = New PersonClass
End If
希望有帮助!
【讨论】:
一般来说,在 .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 是“对象引用未设置为对象实例”的来源。
【讨论】:
如果您认为数据库查询没有返回数据时会发生这种情况,那么您是否应该在对其进行操作之前测试结果?
Dim result As String = SqlCommand.ExecuteScalar() 'just for scope'
If result Is Nothing OrElse IsDBNull(result) Then
'no result!'
End If
【讨论】:
您可以在应用程序中加入日志记录机制,以便隔离错误原因。 Exception 对象具有 StackTrace 属性,该属性是一个描述调用堆栈内容的字符串,最近的方法调用首先出现。通过查看它,您将获得有关可能导致异常的原因的更多详细信息。
【讨论】:
在使用数据库时,当您尝试从不存在的字段或行中获取值时,您可能会收到此错误。即,如果您正在使用数据集并且您使用:
Dim objDt as DataTable = objDs.Tables("tablename")
如果数据集中不存在表名,则会得到对象“未设置对象实例的引用”。数据集中的行或字段也是如此。
【讨论】:
嗯,错误正在自我解释。由于您没有提供任何代码示例,我们只能在您的代码中的某处说,您正在为某些任务使用 Null 对象。我在下面的代码示例中遇到了同样的错误。
Dim cmd As IDbCommand
cmd.Parameters.Clear()
如您所见,我将清除一个空对象。为此,我收到错误
“对象引用未设置为对象的实例”
检查您的代码中是否存在此类代码。由于您没有给出代码示例,我们无法突出显示代码:)
【讨论】:
如果你有一个类属性和多个构造函数,你必须在所有构造函数中初始化属性。
【讨论】: