2013-11-25 3 views
0

내 프로젝트의 비용을 계산하는 방법이 있지만 계산이 완료되면 데이터베이스의 각 행에 대해 계산을 수행해야합니다. 목록에 저장하고 싶지만 오류가 발생했습니다.목록에있는 Datareader 계산 결과를 저장하십시오.

지금까지 내가 가진 :

string Query = "SELECT p.PID, p.PName, (p.Weight * b.Foodcost) + p.VetBill 
       + b.Housing AS TotalCost FROM pet p INNER JOIN breed b ON 
       p.BreedID = b.BreedID"; 
OleDbCommand myCommand = new OleDbCommand(myQuery, con); 
List<int> val = new List<int>(); 
try 
{ 
    con.Open(); 
    OleDbDataReader reader = myCommand.ExecuteReader(); 

    while (reader.Read()) 
    { 
     val.Add(reader.GetInt32(0)); 
    } 
} 

catch (Exception ex) 
{ 
    Console.Write("Error " + ex); 
} 
return val; 

을 내가 이것을 실행할 때, 반환되는 모든 것을 행의 기본 키가에 대한 계산을 수행이다 ... 내가이 문제를 해결 어떻게? SQL 또는 Access에서 명령문을 실행하면 예상 한 결과가 나옵니다.

답변

3

변경을 시도

val.Add(reader.GetInt32(0)); 

에 ...

val.Add(reader.GetInt32(2)); 

를 잘못된 열을지고 값은이다 ordinal 위치, 0이 첫 번째입니다.

또한, 어쩌면

if (!reader.IsDBNull(2)) 
     val.Add(reader.GetInt32(2));//or use reader.GetDouble(2) since its a cost? 
else 
     val.Add(0); 

나는 당신이 두 번을 반환하는 경우에 GetDouble()을 추가했습니다 ...이 생각, 또는 진수를 사용하는 경우 당신은 GetDecimal()를 사용해야합니다. 분명히

, 그것이 Int하지 않고, 당신이 변수를 변경해야 다음, GetInt32을 변경해야하는 경우 ...

var val = new List<double>(); 

편집 : 유효하지 않은 캐스트

의 의견을 바탕으로
  1. 어디서 오류가 발생합니까?
  2. 'TotalCost'필드의 모양은 무엇입니까?
  3. 쿼리를 실행하고 데이터를 확인하십시오. non int 인 경우 nn.nn 또는 nulls 인 경우 유형을 변경해야합니다.
+0

이제 "지정된 캐스트가 유효하지 않습니다."라는 오류 메시지가 나타납니다. – user2201158

+0

null에 대한 확인을 추가 했습니까? 또한 SQL을 실행하여'TotalCost'가 어떻게 보이는지 확인하십시오.데이터를 덤프 할 수 있습니까, 아니면 데이터를 잘라낼 수 있습니까? 아마도 몇 줄입니까? – christiandev

+0

TotalCost는 totalcost를 표시하기 위해 사용하는 별칭입니다. 데이터베이스에있는 열이 아닙니다. – user2201158

3

당신은 ...

string Query = "SELECT p.PID, p.PName, (p.Weight * b.Foodcost) + p.VetBill + b.Housing AS TotalCost FROM pet p INNER JOIN breed b ON p.BreedID = b.BreedID"; 
     OleDbCommand myCommand = new OleDbCommand(myQuery, con); 
    List<int> val = new List<int>(); 
    try 
    { 
     con.Open(); 
     OleDbDataReader reader = myCommand.ExecuteReader(); 


     while (reader.Read()) 
     { 
      val.Add(reader.GetInt32(2)); 


     } 
    } 

    catch (Exception ex) 
    { 
     Console.Write("Error " + ex); 
    } 
return val; 

이이

+0

"지정한 캐스트가 유효하지 않습니다."라는 오류 메시지가 표시됩니다. – user2201158

+0

은 아마도 정수가 아니기 때문일 수 있습니다. – Bit

+0

우리에게 SQL 테이블 디자인을 보내면 제 생각에 열이 정수가 아닌 double을 반환한다는 것입니다. – CaveCoder

관련 문제