2015-06-28 3 views
3

Я пытаюсь удалить хранимую процедуру из кода C#, но всегда получаю результат == -1. Я не знаю, где я ошибся. Я много искал, но не нашел решения. Пожалуйста, загляните в мой фрагмент кода и расскажите мне, что я делаю неправильно.Невозможно получить данные из хранимой процедуры

Заранее спасибо.

C# Код:

using (SqlConnection connection = new SqlConnection(getConnectionString())) 
using (SqlCommand command = new SqlCommand()) 
{ 
    Int32 rowsAffected; 

    command.CommandText = "SP_LOGIN_GETUSERBYNAME"; 
    command.CommandType = CommandType.StoredProcedure; 
    // command.Parameters.Add(new SqlParameter("@Email", userObj.email)); 
    // command.Parameters.Add("@Email", SqlDbType.VarChar).Value = userObj.email.Trim(); 
    command.Parameters.AddWithValue("@Email", userObj.email.ToString()); 
    command.Connection = connection; 

    connection.Open(); 
    rowsAffected = command.ExecuteNonQuery(); 
    connection.Close(); 

    return rowsAffected; 
} 

Строка соединения:

return "Data Source=MUNEEB-PC;Initial Catalog=HRPayRoll;User ID=sa; Password=sa"; 

хранимой процедуры Код:

CREATE PROCEDURE SP_LOGIN_GETUSERBYNAME 
    @Email varchar(50) 
AS 
    SELECT * 
    FROM [User] 
    WHERE Email = @Email 
GO 
+0

Избегайте именования хранимых процедур с помощью префикса 'sp_'. Этот префикс используется для системных хранимых процедур, включенных в SQL Server. –

+0

Спасибо за руководство мне @Dan :) –

ответ

4

Из ExecuteNonQuery док;

Для UPDATE, INSERT и DELETE заявления, возвращаемое значение является число строк, затронутых командой. Когда триггер существует в вставленной или обновляемой таблице , возвращаемое значение включает в себя номер строк, затронутых операциями вставки или обновления, и числом строк, затронутых триггером или триггерами. Для всех других типов заявлений, возвращаемое значение равно -1

Поскольку ваша команда ВЫБРАТЬ, это слишком нормально, чтобы получить -1 в качестве возвращаемого значения.

Если вы хотите сообщить свои результаты, вы можете использовать метод ExecuteReader.

var reader = command.ExecuteReader(); 
while (reader.Read()) 
{ 
    // This will iterate your results line by line and 
    // You can get columns with zero-based values like reader[0], reader[1] or 
    // can use GetXXX methods of it like GetString(0) or GetInt32(1) etc. 
} 
+0

Спасибо за ваш ответ. Тогда как я могу получить определенную строку из БД? а затем преформировать дальнейшую работу на основе этих значений? –

+0

Я хочу спросить, как я могу получить весь объект. Спасибо –

+0

@Steve Ups, пропустил это. Исправлена. –

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