SQLCommand不返回任何内容

时间:2012-08-30 09:29:31

标签: c# tsql sql-server-2008-r2

我正在尝试执行参数化的SQLCommand,它应该返回1个值。相反,它返回一个空集,没有抛出异常,程序只是继续。

这是查询:

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个参数传递,当我在调试器中检查SQL命令时,它们被正确传递。 @person是一个字符串,另外两个是整数。

任何帮助都将不胜感激。

编辑: 我可能还应该添加pars数组的结构:

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"

2 个答案:

答案 0 :(得分:3)

您实际上是在DataReader

上调用Read()吗?
while (res.Read())
{
    // something with res[x] field values here
}

请参阅MSDN - http://msdn.microsoft.com/en-us/library/haa3afyz(v=vs.100).aspx

或者,或者您的查询没有任何结果。

从您的编辑中,您的参数值“应该”(基于您当前的设计,而不是最佳做法)

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

答案 1 :(得分:0)

好吧,看起来问题是addWithValue()将字符串强制转换为NVARCHAR,我认为这在WHERE子句中引起了麻烦,因为我的字段是VARCHAR类型。明确的类型转换解决了这个问题。