2013-06-07 3 views
2

현재 C#으로 작성된 WPF 응용 프로그램의 데이터베이스에서 레코드를 검색하려고합니다. 나는 SQL 데이터 판독기를 사용하고 있는데 그것을 잘 연결 나타나지만 다음은 나에게 NullReferenceException이 제공된다SqlDataAdapter.Fill (DataTable) DataTable을 채우지 못함

다시
 if (isString == true) 
     { 
      SqlDataAdapter adapter = new SqlDataAdapter("SELECT PartNumber FROM LoanerItems", loanersConnection); 
      DataTable datatable = new DataTable(); 
      adapter.Fill(datatable); 

      for (int i = 0; i < datatable.Rows.Count - 1; i ++) 
      { 
       passBackRecords[i] = datatable.Rows[i].ToString(); 
      } 
     } 

내가 데이터베이스에 연결하고있어 것처럼하지만 것을 나는 디버거를 통해 실행하는 경우 데이터 테이블이 채워지지 않은 것 같습니다. 그것은 도움이 될 경우

내 연결 문자열 :

 SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(); 
     scsb.DataSource = "LLOYD2\\"; 
     scsb.InitialCatalog = "LoanersTest"; 
     scsb.IntegratedSecurity = true; 
     scsb.ConnectTimeout = 30; 

나는 현재이 개 그것의 레코드 대신 확정 데이터베이스 테스트 데이터베이스를 사용하고 있습니다. Transact-SQL 편집기를 사용하여 시도한 및 기록을 잘 나타납니다.

* 편집 :

for (int i = 0; i < datatable.Rows.Count - 1; i++) 

과 : 나는 모두를 시도했습니다

  SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM LoanerItems", loanersConnection); 
      DataTable datatable = new DataTable(); 
      adapter.Fill(datatable); 
      for (int i = 0; i < datatable.Rows.Count - 1; i++) 
      { 
       passBackRecords[i] = datatable.Rows[i]["BCPartNumber"].toString; 
      } 

:

for (int i = 1; i < datatable.Rows.Count; i++) 

다음은 ArguementOutOfRange 예외를 던지기 시작 passBackRecords을 intializing 후

하지만 둘 다 작동하지 않는 것 같습니다.

datatable.Rows.Count; 

은 데이터 테이블에 두 개의 행이 있음을 보여줍니다.

+1

어떤 종류의 오류 메시지가 나타 납니까? – SamiHuutoniemi

+1

'isString == true'입니까? –

+2

나는'passBackRecords'가 null이라는 것을 내기를 원합니다. 어떤 라인에서 정확하게 Exception을 얻을 수 있습니까? – Renan

답변

3

0 행이 반환 된 경우에도 DataTablenull이 아닙니다. passBackRecordsnull입니다 - 언제

passBackRecords[i] = datatable.Rows[i].ToString(); 

실패합니다 그러나,이 라인에 한 곳이있다. 행의 값이 당신은 또한 얻을 것 null 경우

.Rows[i].ToString(); 

NullReferenceExceptionToString()를 호출 할 때 : 또 다른 가능한 위치는 이것이다. 하지만 나는 을 거의에 넣었다. 아직 초기화하지 않았다는 사실에 돈을 넣었다. passBackRecords.

+0

나는 passBackRecords를 초기화하는 것을 실수로 잊어 버렸습니다. 저것 주셔서 감사합니다. 나는 정확히 내가 찾은 데이터 테이블에서 읽는 방법을 확실히 모르겠다. 'Rows [i] .ToString(); ' 행에 실제로 데이터를 반환하지 않는다. – DanteTheEgregore

+0

@ZachSmith 대신'Rows [i]를 사용하십시오.ToString()'행 [i]을 문자열로 사용하므로 실패하지 않습니다. –

+0

행 [i] .ToString()은 행 객체의 문자열 표현만을 제공합니다. 데이터의 특정 열에 액세스하려면 행 [i] [ "ColumnName"]. ToString(); – Bearcat9425

관련 문제