我在VB.net中遇到错误“对象引用没有设置为对象的实例”。你能告诉我这个错误的原因是什么吗?感谢..
答案 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 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是“未设置为对象实例的对象引用”的来源。
答案 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属性和多个构造函数,则必须在所有构造函数中初始化该属性。