Изменить: ответ отредактирован после уточнения
Если я прав, вы бы сделали что-то вроде этого:
CREATE proc [Usp_GetCallCountByUserID]
@UserId int
@TotalCount int output
AS
BEGIN
SELECT @TotalCount = COUNT(*) FROM Customer WHERE UserId = @UserId
END
Пожалуйста, измените код вызова c# соответственно , Вы не нуждаетесь в предложении GROUP BY, если группируете по тому же полю, по которому вы фильтруете.
Замечание: IMO хранимая процедура является избыточной для такой простой задачи и не дает каких-либо ощутимых улучшений производительности, особенно если ваше приложение и сервер БД всегда включены (оба оптимизируют выполнение запроса, если оно будет повторено). Когда запросы настолько просты, я бы предпочел выполнить CommandType.Text DbCommand:
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT Count(*) FROM Customer where UserId = @UserId";
cmd.Parameters.Add("@UserId", SqlDbType.Int).Value = currentUserId;
using (var reader = cmd.ExecuteReader())
{
reader.Read(); // Advance one record
ViewBag.CountLog = reader.GetInt32(0);
}
}
Наконец, поскольку вы, похоже, используете какой-то ORM (Entity Framework?), Почему бы просто:
db.Customers.Count(c => c.UserId == currentUserId);
Это в значительной степени эквивалентно приведенному выше коду.