2012-01-22 3 views
1

Запрос всегда возвращает -1, не знаю почему. Кто-нибудь, пожалуйста, объясните. Значение count всегда остается равным -1.Count Всегда возвращает -1 SQL Server. ASP.NET C#

string query = "SELECT COUNT(*) AS Emails FROM users"; 

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    SqlCommand command = new SqlCommand(query, connection); 
    command.Parameters.AddWithValue("@email", email); 

    try 
    { 
     connection.Open(); 
     count = command.ExecuteNonQuery(); 

     if (count > 0) 
      return "Something Wrong1"; 
    } 
    catch 
    { 
     return "Something Wrong2"; 
    } 

    return count + "Every thing ok"; 
} 
+2

Из [MSDN] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx): для операторов UPDATE, INSERT и DELETE возвращаемое значение равно количество строк, на которые влияет команда. Когда триггер существует в вставленной или обновляемой таблице, возвращаемое значение включает в себя количество строк, затронутых как операцией вставки, так и обновлением, а также количеством строк, затронутых триггером или триггерами. Для всех других типов операторов возвращаемое значение равно -1. – SWeko

+2

Это не значение 'count', которое вы возвращаете - вызов' .ExecuteNonQuery' возвращает количество строк **, затронутых ** вашим оператором SQL - нет ничего, что могло бы повлиять на любые строки, поэтому вы получите -1 , Вместо этого используйте '.ExecuteScalar()', чтобы вернуть значение одной строки, одно значение столбца, возвращаемое вашим запросом. –

ответ

4

Это потому, что ExecuteNonQuery не возвращает результат запроса, он просто выполняет его на SQL-сервере. Возвращаемое значение - это количество строк, на которые влияет ваш оператор, -1, когда оператор не влияет на какие-либо строки. ExecuteNonQuery (как следует из названия) не предназначен для возврата результатов запроса, а скорее для запуска оператора, который изменяет данные (например, INSERT, DELETE, UPDATE). Состояние документы:

Для UPDATE, INSERT и DELETE заявления, возвращаемое значение является число строк, затронутых командой. (...) Для всех остальных типов операторов возвращаемое значение равно -1. Если происходит откат, значение возврата равно -1.

Вы могли бы использовать:

count = (int)command.ExecuteScalar(); 

Чтобы получить количество вы ищете. Также есть пример в docs for ExecuteScalar.

+0

Большое вам спасибо. Проблема в этом. Спасибо всем за быстрый ответ. –

1

Я думаю, что, возможно, что вы имеете в виду для вашего SQL заявление, чтобы быть:

SELECT COUNT(*) FROM users WHERE Email = @email 

Кроме того, вы должны использовать метод ExecuteScalar для получения счета.

0

Я не специалист по C#, но это command.ExecuteNonQuery() не кажется правильным ... это запрос в конце концов!

Смежные вопросы