【问题标题】:SQLCommand doesn't return anythingSQLCommand 不返回任何内容
【发布时间】: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


【解决方案1】:

您实际上是在 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"

【讨论】:

  • 这不是问题,问题是当我在使用调试器执行后检查 sqlcommand 时,结果视图没有显示任何内容。我还可以补充一点,如果在 SSMS 中使用相同的参数执行,查询确实会返回值。
  • @kyooryu 请定义“执行后检查 sqlcommand”是什么意思 - 命令 从不 包含数据。您在哪里寻找数据?
  • 我的意思是 SQLDataReder res 的结果视图属性,对此感到抱歉。
  • @kyooryu 再说一遍,阅读器是 pipe,而不是 bucket - 它从不真正“包含”数据;您需要通过Read(如图所示)或将其喂给其他东西(例如DataTable)来使用它
  • 当我将 FOR XML AUTO 附加到查询并尝试将其转储到 xmlReader 时,也会发生同样的情况。属性计数属性是 0 并且那里也什么都没有,所以我仍然认为问题出在其他地方。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2019-04-06
    • 2012-02-15
    • 2020-09-07
    • 2021-11-22
    • 2015-11-06
    • 2013-11-14
    相关资源
    最近更新 更多