Следующий код, насколько я понимаю, должен создать параметризованный оператор и добавить значение к этому параметру. Параметр «@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"]);
}
Я уверен, что это что-то простое, что мне не хватает, но я не смог этого увидеть.