2012-08-30 4 views
-1

매개 변수화 된 SQLCommand를 실행하려고합니다.이 매개 변수는 1 값을 반환해야합니다. 대신 빈 집합을 반환하고 예외는 throw되지 않고 프로그램은 계속 진행됩니다. SQLCommand가 아무 것도 반환하지 않습니다.

쿼리입니다 :

SELECT SUM(s.cost) AS cost 
FROM Spending s JOIN Date d ON s.dateID = d.dateID 
    JOIN [Service category] sc ON s.[service categoryID] = sc.[service categoryID] 
WHERE sc.category1 = 'Phone' AND s.personID = @person 
    AND d.month = @month AND d.year = @year 

C# 코드는 다음과 같다 : 3 개 개의 매개 변수가

 SqlCommand commandSelect = new SqlCommand(query, conn); 
     foreach (string[] p in pars) 
     { 
      commandSelect.Parameters.AddWithValue("@" + p[0], p[2]); 
     } 
     SqlDataReader res = commandSelect.ExecuteReader(); 

은 통과하고 내가 디버거에서하는 SqlCommand를 확인할 때, 그들은 제대로 전달됩니다. @person은 문자열이고 다른 두 개는 정수입니다.

어떤 도움

주시면 감사하겠습니다.

편집 : 아마도 갈 거예요 배열의 stucture 추가해야합니다 :

pars[0][0] = "person" 
pars[0][2] = "'IDString here'" 
pars[1][0] = "month" 
pars[1][2] = "2" 
pars[2][0] = "year" 
pars[2][2] = "2012" 
+0

문자열 케이스가 쿼리에 제공된 것과 다를 수 있습니다. – Habib

+0

ExecuteReader를 호출하는 행에 중단 점을 설정하면 명령 텍스트를 사용하여 SSMS를 통해 실행합니다. SSMS를 통해 이러한 쿼리를 실행할 때 결과가 있습니까? –

+0

명령 텍스트는 query와 동일합니다. 매개 변수 이름을 실제 값으로 대체하는 또 다른 속성이 있습니까? – kyooryu

답변

0

수 귀하의 매개 변수 값이 (모범 사례와 달리, 현재의 디자인을 기반으로) "해야"당신의 편집에서

은 보인다 , 내 필드가 VARCHAR 타입 이었기 때문에 WHERE 절에서 문제를 일으킨다 고 나는 믿는다. 명시 적 typecasting은 문제를 해결했습니다.

3

가 실제로 DataReader를

while (res.Read()) 
{ 
    // something with res[x] field values here 
} 

참조 MSDN에 Read()를 호출 - http://msdn.microsoft.com/en-us/library/haa3afyz(v=vs.100).aspx

하나를 그 , 또는 쿼리에 결과가 없습니다. 문제가 addWithValue()을 NVARCHAR로 문자열을 캐스팅이었다처럼 잘

pars[0][2] = "IDString here" 
+0

thats not the problem, 문제는 디버거로 실행 한 후 sqlcommand를 검사하면 결과보기에 아무것도 표시되지 않는다는 것입니다. 또한 SSMS에서 동일한 매개 변수로 실행될 경우 쿼리가 값을 반환한다고 추가 할 수도 있습니다. – kyooryu

+0

@kyooryu "실행 후 check sqlcommand"로 무엇을 의미하는지 정의하십시오. * never * 명령은 데이터를 포함합니다. 데이터를 어디에서 찾고 있습니까? –

+0

SQLDataReder res의 결과보기 속성을 의미합니다. 죄송합니다. – kyooryu

관련 문제