【发布时间】:2012-08-25 00:01:20
【问题描述】:
我正在尝试执行参数化的 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 个参数传递,当我在调试器中检查 SQLcommand 时,它们传递正确。 @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"
【问题讨论】:
-
可能是字符串大小写与查询中提供的不同
-
在调用
ExecuteReader的行上设置断点获取命令文本,通过 SSMS 运行它。当您通过 SSMS 运行此类查询时,您会得到任何结果吗? -
命令文本与查询相同。是否有另一个属性可以将参数名称替换为实际值?
-
首先,您的 ID 字符串不应包含
'。尽管传递正确数据类型的参数会更好,但删除它们至少会使其工作。即:pars[0][2] = "IDString here" -
删除引号没有帮助。
标签: c# tsql sql-server-2008-r2