2014-01-15 1 views
2

내 코드 섹션에서 DataTable과 DataTableReader를 사용하여 SQLite 데이터베이스에서 정보를 가져 와서 목록에 추가합니다. 프로그램이 reader.GetValue 행에 도착하면 프로그램은 ArgumentOutOfRangeException을 발생시킵니다. 내가 아는 한이 일이 일어날 이유가 없습니다.DataTableReader.GetValue (int) throwing ArguementOutOfRangeException

DataTable dt = db.GetDataTable(Program.CONN, "SELECT ID FROM table WHERE column LIKE 'False%'"); 
    using (DataTableReader dtr = dt.CreateDataReader()) 
    { 
     while (dtr.Read()) 
     { 
       int rt = 0; 
       foreach (DataRow dr in dt.Rows) 
       { 
        string line = dtr.GetValue(rt).ToString();//Arguement out of range exception being thrown here 
        idList.Add(line); 
        rt++; 
       } 
      } 
    } 

답변

3

당신은 행이 아닌 열을 반복한다. 당신은 수행해야합니다

DataTable dt = db.GetDataTable(Program.CONN, "SELECT ID FROM table WHERE column LIKE 'False%'"); 
int count = dt.Columns.Count; 
using (DataTableReader dtr = dt.CreateDataReader()) 
{ 
    while (dtr.Read()) 
    { 
     for (int rt = 0 ; rt < count ; rt ++) 
     { 
      string line = dtr.GetValue(rt).ToString(); 
      idList.Add(line); 
     } 
    } 
} 

또는 : (! (dtr.IsDBNull (RT))) 나는 내 대답을 편집

DataTable dt = db.GetDataTable(Program.CONN, "SELECT ID FROM table WHERE column LIKE 'False%'"); 
using (DataTableReader dtr = dt.CreateDataReader()) 
{ 
    while (dtr.Read()) 
    { 
     foreach (DataColumn col in dt.Columns) 
     { 
      string line = dtr[col.ColumnName].ToString(); 
      idList.Add(line); 
     } 
    } 
} 
+0

아닙니다. 그의 구문을 따랐지만 for 루프를 사용하는 것이 더 낫다 – Plue

+0

예. 답변을 업데이트 드리겠습니다 – Plue

+0

@LarsTech ** dtr [col.ColumnName] **이 (가) DataTableReader에서 작동하는지 확인 하시겠습니까? – Plue

0
int fc = dataReader.FieldCount; 
while (dtr.Read()) 
{ 
    for (int rt = 0 ; rt < fc ; rt ++) 
    { 
    if (fc > rt) 
    { 
     if (!(dtr.IsDBNull(rt))) 
     { 
      string line = dtr.GetValue(rt).ToString(); 
      idList.Add(line); 
     } 
     } 
    } 
} 
+0

......... 나는 경우 의 포함을 좋아한다 {)하지만 그건 나야. 나의 편집은 또한 Plue의 "캐치 (catch)"때문 이었으므로 응답에는 신용이 주어져야합니다. 그러나 나는이 대답을 여기에 남겨 두었다. – granadaCoder