Функция SQL Count (). и установка переменных - PullRequest
0 голосов
/ 02 июля 2011
    public void GetUsersDetails(Guid i)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("DECLARE @NumberOfThreadsByOneUser smallint;");
    sb.Append(" SET=(SELECT COUNT(t.threadID)");
    sb.Append(" FROM Threads AS t");
    sb.Append(" INNER JOIN Users AS u ON u.UsersID=t.UsersID");
    sb.Append(" WHERE u.UsersID=@UserID)");

    string myConnectionString = AllQuestionsPresented.connectionString;
    using (SqlConnection conn = new SqlConnection())
    {
        SqlCommand cmd = new SqlCommand(sb.ToString(), conn);
        cmd.Parameters.Add("UserID", SqlDbType.UniqueIdentifier).Value = i;
        SqlDataReader dr = cmd.ExecuteReader();


 dr.Read();
     QA = (Int32.TryParse(dr["NumberOfThreadsByOneUser"].ToString(), out result3)) ? int.Parse(dr["Replies"].ToString()) : 0;
    }
}

Я написал оператор SQL, и я хочу получить количество потоков, отправленных пользователем. Поэтому я объявил переменную smallint. Но я не уверен в синтаксисе моего оператора SQL. Я хочу прочитать из результата. Свойство QA int должно получить это число ..

1 Ответ

4 голосов
/ 02 июля 2011

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...