2012-08-30 185 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