Используйте select
вместо set
для назначения переменной на основе запроса:
sb.Append(" SELECT @NumberOfThreadsByOneUser = (SELECT COUNT(t.threadID)");
Чтобы использовать выходную переменную, не объявляйте ее в SQL, а передайте:
cmd.Parameters.Add("@NumberOfThreadsByOneUser").ParameterDirection =
ParameterDirection.InputOutput;
Затем после выполнения команды вы можете извлечь ее:
var result = cmd.Parameters("@NumberOfThreadsByOneUser").Value
В качестве альтернативы, используя подход чтения, не объявляйте переменную в SQL и не передавайте еев качестве параметра.
sb.Append(" SELECT COUNT(t.threadID) as ThreadCount");
....
sb.Append(" WHERE u.UsersID=@UserID"); // <-- no closing )
И читать это как:
var QA = (int) cmd.ExecuteScalar();
Или:
var read = cmd.ExecuteReader();
read.Read(); // <-- Gotta move to the first row
var QA = (int) read["ThreadCount"]; // <-- or whatever your column alias is