2012-01-10 3 views
0

저는 꽤 많은 부분을 검색하여 도움이되지 않았습니다.개체가 Win7 x64에서 인스턴스화하지 못했습니다.

Windows 7 및 XP x86에서 오류없이 실행중인 C# (모든 CPU 설정)으로 앱을 작성했습니다.

최근 내 사무실에서 내 워크 스테이션을 Windows 7 x64 (x86에서)로 업그레이드했습니다.

Visual Studio 2010에서 응용 프로그램을 실행할 때 실행 또는 컴파일시 오류가 발생하지 않습니다. 그것은 설계된대로 작동합니다.

내 VS2010 버전은 우리의 MSDN 구독에서 10.0.30319.1 RTMRel이며, 프레임 워크는 때 SqlConnection 개체와 4.0.30319 RTMRel

내 컴파일 된 응용 프로그램을 실행하는 바로 내가 오류가 발생합니다. 어떤 CPU 또는 x86을 선택하더라도 동일한 오류가 발생해도 상관 없습니다. 내 클래스 파일에서

이 루틴입니다 :

 public static SqlConnection getDBConnection() 
    { 
     SqlConnection sqlConn = null; 
     try 
     { 
      sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["KpH2Oprod"].ConnectionString); 
      sqlConn.Open(); 
     } 
     catch 
     { 
      throw; 
     } 
     finally 
     { 
      if (sqlConn == null) 
      { 
       sqlConn.Dispose(); 
      } 
     } 

     return sqlConn; 
    } 
가 처음 인스턴스화 때 나는 오류를 발견 일부 수동 추적이되지 SqlConnection sqlConn = null; 후 발생되는

하지만 실제로 라인을 설정할 때 :

내가 볼 수

sqlConn = new SqlConnection(); 
sqlConn.ConnectionString = ConfigurationManager.ConnectionStrings["KpH2Oprod"].ConnectionString; 

:

sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["KpH2Oprod"].ConnectionString); 

나는이 라인을 변경 한 그것은 SqlConnection 또는 구성 관리자 였고 실제로는 sqlConn = new SqlConnection(); 행을 throw합니다. 사실 이것은 이것이 내가 시작하고 이전의 것으로 변경 한 방법이었습니다. 새로운 지시어를 사용할 때 오류를 발생시킵니다.

나는 (일부는 내 자신의 메시지입니다)은 다시 얻을 실제 오류 메시지 :이은 SQL 오브젝트가 등록하는 방법과 관련이있을 수 있다고 생각

하지만 메시지의 중심에 잘라입니다 처음 몇 줄 (내 일은 아니지만)은 매개 변수 g가 null임을 가리 킵니다. 다시 이것은 완벽하게 디버거에서 작동합니다.

RunTimeError : 
Value cannot be null. 
Parameter name: g 
at System.Guid..ctor(String g) 
at kpH2O.frmMain..ctor() (mscorlib) 

ACTION : 
UPDATEINCIDENT() 

PROGRESS : 
WORKING() 

RunTimeError : 
Object reference not set to an instance of an object. 
at kpH2O.db.getDBConnection() 
at kpH2O.db.getIncidentIDFromNumber(String incidentNumber) 
at kpH2O.frmMain.updateHeatIncident() (kpH2O) 

ERROR : 
Process UPDATEINCIDENT: FAILED (doStartUp) 

이것은 추가 기능없이 VS2010을 설치 한 상태로 제공됩니다. 어떤 도움이라도 대단히 감사합니다.

+0

원시 예외/스택 추적 만 캡처하는 방법이 있습니까? – RQDQ

+0

또한 throw 문만있는 catch 절을 사용하면 아무런 이점이 없습니다. – RQDQ

+0

다음은 동일한 상황입니다. http://weblogs.asp.net/fmarguerie/archive/2004/08/13/214135.aspx –

답변

0

기능의 유효성을 검사하려면이 스 니펫으로 테스트 해보십시오. 현재 코드에는 처리 논리에 결함이있어 복잡한 작업 만 수행합니다.

string connectionString = ConfigurationManager.ConnectionStrings["KpH2Oprod"].ConnectionString; 

using(SqlConnection sc = new SqlConnection(connectionString)) 
{ 
    sc.Open(); 
    // perform simple data access 
} 
+0

이 함수의 핵심은 SqlConnection 개체를 반환하는 것입니다. 버려진 물건을 돌려주는 것은 쓸모가 없다! – Gabe

+0

게이 나는 총을 뛰어 넘고 있다고 생각합니다. 그들이 말하는 것은 코드가 구조화 된 방식입니다. 코드가 원래 작성된 방식을 기반으로 유효한 SQLConnection 객체를 반환 할 수 없습니다. @Tim은 아마도 내 의견으로는 최고의 추천을 작성했습니다. 헤더에서 그의 사용 섹션이 어떻게 보이는지 그는 System.Data.SqlClient를 사용하여 사용합니다; – MethodMan

+0

@Gabe - 정확하게, OP 코드의 현재 코드가 finally 블록에 "NullReferenceException"을 던지거나 (null 체크를 수정하도록 업데이트 된 경우) 호출자가 사용하기 전에 연결을 처리 할 것이라고 지적했습니다. –

0

.config 파일에 정의 된 연결 문자열은 어떻게됩니까? ..? 또한

내가 시도 캐치 {}의 사용을 만들 것이

sqlConn = ConfigurationSettings.AppSettings["connectionString"]; //assuming this is what you named your connection string.. 

둘째처럼 sqlConn을 정의 할뿐만 아니라 사용하는 퍼팅 볼 것이라고 많이 볼 필요가있다() {} 그 내 해당 sqlConn을 처리하지 않으려면

을 시도하십시오.그런 다음 정적 속성으로 만듭니다.

public static SQLConnection sqlConn = null;

는 당신이 그것을 사용해야 할 경우 .. 내 새로운 구조를 사용하여() {} 전술 한 바와 같이 ..뿐만 아니라 당신이 당신의 원래 구조 ConfigurationSetting and manager

를 사용하여 연결 문자열 변수를 열거하려면이 링크에서 보기
+0

늦어서 죄송합니다. 이것은 문제가되지 않습니다. 내 컴퓨터가 두 번 충돌하고 ... 기술자가 Windows 7 32 비트를 다시 설치하면 응용 프로그램이 다시 정상적으로 작동합니다. –

+0

좋은 소리지만 당신 win7 64 비트 업데이 트 문제가 있었는지 궁금해 한 문제가 있었 .. VS2010/2008 내 바람 7 64 비트 나무에 놀아 대하지만 더 이상의 문제에 대한 업데이 트를 설치 .. 미안 해요 너의 PC가 부서지는 것을 계속 들었다. .. – MethodMan