2012-01-22 2 views
3

У меня есть эта хранимая процедура для проверки ВойтиПроцедура или функция «ValidateUserLogin» ожидает параметр «@Username», который не поставлялся

ALTER PROCEDURE ValidateUserLogin 
(
@UserName varchar (50), 
@Password varchar (50) 
) 
AS 
BEGIN 
if EXISTS(SELECT * FROM AdminLogin WHERE [email protected] AND [email protected]) 
select 0/*returns 0 on success*/ 
ELSE 
select 1/*non zero otherwise*/ 

END 

и я зову его, используя код, приведенный ниже, но я получаю следующее исключение «Процедура или функция« ValidateUserLogin »ожидает параметр« @UserName », который не был указан».

bool boolReturnValue = true; 

    SqlCommand command = new SqlCommand(); 
    command.Connection = sqlConnection; 
    command.CommandType = CommandType.StoredProcedure; 
    command.CommandText = "ValidateUserLogin"; 
    command.Parameters.Add(@username,SqlDbType.VarChar,50).Value=username; 
    command.Parameters.Add(@password, SqlDbType.VarChar,50).Value=password; 
    sqlConnection.Open(); 
    try 
    { 
    command.ExecuteScalar(); 
     boolReturnValue=Convert.ToBoolean(command.ExecuteScalar()); 
    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.Message); 
    } 

и когда я пытаюсь установить значение по умолчанию для имени пользователя и пароля в нуле я получаю исключение @admin не является параметр для процедуры ValidateUserLogin // админа этого значения, предоставляемое для пользователя

ответ

3

Изменить следующие две строки:

command.Parameters.Add(@username,SqlDbType.VarChar,50).Value=username; 
command.Parameters.Add(@password, SqlDbType.VarChar,50).Value=password; 

с:

command.Parameters.Add("@Username",SqlDbType.VarChar,50).Value=username; 
command.Parameters.Add("@Password", SqlDbType.VarChar,50).Value=password; 
+0

Вы предлагаете, чтобы хранимые процедуры SQL были деликатный случай? Я думал, что не – Mubarek

+2

@nuux - Это зависит от настройки базы данных по умолчанию. У большинства людей нет сопоставлений CS. Но отсутствие кавычек в первой версии определенно вызовет проблему, поскольку она попытается представить параметры, названные в честь того, что когда-либо было значением переменных. Это должно иметь '' @UserName "для решения обеих возможных проблем. –

+0

@MartinSmith - Извините, I'vent заметил квотацию. Когда возможно, у кого-то есть сопоставления CS – Mubarek

2

Вы должны поместить свое имя параметра в кавычки для метода Добавить. Другими словами, «@username» с кавычками.

+2

+1 Без кавычек это не строка и просто ссылается на переменную 'username' (префикс' @ ', возможно, разрешен там, чтобы разрешить зарезервированные слова как имена переменных IIRC) –

1

Если база данных чувствительна к регистру, чем параметры имеют чувствительность к регистру

command.Parameters.Add(@username,SqlDbType.VarChar,50).Value=username; 

должен иметь параметр @Username для соответствия процедуре.

То же самое относится и к паролю, конечно.

+0

Это было так полезно и на самом деле решило мою проблему. Я всегда считал @variable ссылкой на мою переменную. Thanx alot – smrpm