2008-09-25 4 views
0

VB.net "개체 참조가 개체 인스턴스로 설정되지 않았습니다."오류가 발생했습니다. 이 오류의 원인이 무엇인지 말해 줄 수 있습니까? 고마워요.개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

+1

이 오류가 발생하는 코드 파일을 게시하여 – cruizer

+1

코드를 게시하면 어둠 속에서 촬영하지 않아도됩니다. 또는 적어도 무슨 일이 일어나고 있는지 설명하십시오! –

+0

가능한 복제본 [NullReferenceException은 무엇이며 어떻게 수정합니까?] (http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – stakx

답변

1

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 

편집 : 추가 코드 서식 태그 ...

+1

이 답변에 코드 서식 태그를 사용할 수 있습니다. – brien

9

개체는 사용 전에 초기화되지 않았습니다. 코드 파일 형식의 상단에

: 일반적으로

Option Strict On 
Option Explicit On 
+0

Option Explicit은 알 수없는 사람들을 위해 변수의 선언을 강제합니다. 즉, 변수 이름을 fat-finger하면 컴파일러는 다른 변수를 만들려고하지 않고 불평 할 것입니다. Option Strict는 변수의 유형을 변환하려는 경우 수동으로 수행한다는 것을 의미합니다. –

2

는 .NET 런타임에서 이러한 일이 발생할 때마다 할당의 또는 VB.Net에서 (값 Nothing을 할당 변수, null C#에서) 역 참조됩니다.

Option Strict OnOption Explicit On이 발생할 수 있습니다 인스턴스를 감지 도움이되지만 또 다른 함수 호출에서 널/아무것도 얻을 것이 가능합니다

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

NullReferenceException 설정하지 "객체 참조의 원인 개체의 인스턴스에 ".

1

응용 프로그램에 로깅 메커니즘을 넣어서 오류의 원인을 분리 할 수 ​​있습니다. Exception 객체에는 StackTrace 속성이 있습니다.이 속성은 호출 스택의 내용을 설명하는 문자열이며 가장 최근 메서드 호출이 먼저 나옵니다. 이를 살펴보면 예외의 원인을 파악할 수 있습니다.

2

그리고 데이터베이스 쿼리에서 데이터가 반환되지 않을 때가 생겼다고 생각한다면 아마도 결과를 조작하기 전에 결과를 얻으시겠습니까?

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

데이터베이스로 작업 할 때 존재하지 않는 필드 또는 행에서 값 형식을 가져 오려고하면이 오류가 발생할 수 있습니다. 즉 당신이 데이터 세트를 사용하고 당신이 사용하는 경우 : TABLENAME이 아닌 데이터 집합에 존재 않을 경우

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

개체를 얻을 "참조가 개체의 인스턴스로 설정되지 않습니다". 데이터 세트의 행 또는 필드에도 동일합니다.

1

오류 메시지를 분해 해 봅시다.

"개체 참조"는 개체를 참조한 코드에서 사용 된 변수를 의미합니다. 오브젝트 변수는 다른 오브젝트 내에서 선언 된 변수를 사용하고있을 수도 있고 또는 선언되었을 수도 있습니다.

"개체의 인스턴스"개체가 비어 있다는 것을 의미합니다 (또는 VB에서는 "Nothing"라고 말함). 개체 변수를 처리 할 때는 참조하기 전에 해당 개체의 인스턴스을 만들어야합니다.

"설정되지 않음"은 개체에 액세스하려고 시도했지만 컴퓨터가 액세스 할 수있는 개체가 없었 음을 의미합니다.

당신은 당신이 수행 한 모든 aPerson는 사람을 나타냅니다 컴파일러에게했다

Dim aPerson as PersonClass 

등의 변수가 아니라 무엇 사람을 만드는 경우.

"새"키워드를 사용하여 개체의 복사본을 만들 수 있습니다. 도움이

If aPerson Is Nothing Then 
    aPerson = New PersonClass 
End If 

희망에 의해

Dim aPerson as New PersonClass 

당신이 객체가 "아무것도"입니다 있는지 확인하기 위해 테스트 할 수있게하려면 예를

을 위해!

관련 문제