2012-08-30 64 views
-1

我試圖執行參數化SQLCommand,它應該返回1值。相反,它返回一個空集,沒有拋出異常,程序只是繼續前進。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#代碼如下:

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

在有3個參數傳遞,並且當我在調試器檢查的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

命令文本與查詢相同。是否有另一個屬性將實際值替換爲參數名稱? – kyooryu

回答

0

嗯,貌似問題是addWithValue()蒙上字符串NVARCHAR ,我認爲這在WHERE子句中造成了麻煩,因爲我的字段是VARCHAR類型的。顯式類型轉換解決了這個問題。

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

要麼,或者您的查詢沒有任何結果。

從您的編輯,您的參數值「應」(根據您目前的設計,而不是最佳做法)是

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

那不是問題,問題是,當我用調試器執行後檢查sqlcommand時,結果視圖不顯示任何內容。我可能還會補充說,如果在SSMS中使用相同的參數執行查詢,那麼查詢的確會返回值。 – kyooryu

+0

@kyooryu請定義你的意思是「執行後檢查sqlcommand」 - 命令*從不*包含數據。你在哪裏查找數據? –

+0

我的意思是SQLDataReder res的Result view屬性,很抱歉。 – kyooryu