据我了解,以下代码应该创建一个参数化语句并向该参数添加一个值。参数为“@exp”以及添加到其中的值由用户输入确定。我将用户输入存储在String exp;
(不是我的选择,其他人编写了这个函数的大部分内容)。
SQl_Command.CommandText = "SELECT COUNT(*) As MyCount FROM members WHERE ([Primary Exp] = '@exp') AND ([Approved] = 'True') OR ([Approved] = 'True') AND ([Secondary Exp] = '@exp')";
SQl_Command.Parameters.Add("@exp", SqlDbType.NVarChar, 255);
SQl_Command.Parameters["@exp"].Value = exp;
我的测试用例所需的结果是 16,但此查询返回 0。从 SQL Server 2008 运行时,查询有效,如下所示。
SELECT COUNT(*) As MyCount
FROM members
WHERE ([Primary Exp] = 'Risk Management')
AND ([Approved] = 'True') OR ([Approved] = 'True')
AND ([Secondary Exp] = 'Risk Management')
我应该能够Response.Write(SQl_Command.CommandText);
在我选择“风险管理”的地方使用,并且参数化查询应该打印出来:
SELECT COUNT(*) As MyCount
FROM members
WHERE ([Primary Exp] = 'Risk Management')
AND ([Approved] = 'True') OR ([Approved] = 'True')
AND ([Secondary Exp] = 'Risk Management')`
然而事实并非如此。就@exp
好像那是我想比较 [Primary Exp] 和 [Secondary Exp] 的值。那是对的吗?
我已经看到了多种这样做的方法,但我通常一直遵循这里的示例
我认为这不是问题,但这就是我使用查询的方式。
SQl_Reader = SQl_Command.ExecuteReader();
int numRows = 0;
while(SQl_Reader.Read()){
numRows = Convert.ToInt32(SQl_Reader["MyCount"]);
}
我确定这是我想念的简单的东西,但我无法看到它。