Всякий раз, когда вы хотите выполнить оператор SQL, который не должен возвращать значение или набор записей, следует использовать ExecuteNonQuery.
Поэтому, если вы хотите запустить оператор обновления, удаления или вставки,Вы должны использовать ExecuteNonQuery.ExecuteNonQuery возвращает количество строк, затронутых оператором.Это звучит очень хорошо, но всякий раз, когда вы используете IDE SQL Server 2005 или Visual Studio для создания хранимой процедуры, она добавляет небольшую строку, которая разрушает все.
Эта строка: SET NOCOUNT ON;Эта строка включает функцию NOCOUNT в SQL Server, которая «останавливает сообщение, указывающее количество строк, на которые воздействует инструкция Transact-SQL, как часть результатов» и поэтому хранимая процедура всегда возвращает -1, когдавызывается из приложения (в моем случае это веб-приложение).
В заключение удалите эту строку из хранимой процедуры, и теперь вы получите значение, указывающее число строк, затронутых оператором.
Счастливого программирования!
http://aspsoft.blogs.com/jonas/2006/10/executenonquery.html