2012-01-22 5 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 // adminのパラメータではありませんが、ユーザー名

答えて

3

変更以下の2行:

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 - 申し訳ありませんが、私はそれに気付きました。可能であれば誰かがCS照合を持つことができます – Mubarek

2

のために提供された値でありますAddメソッドのパラメータ名を引用符で囲む必要があります。言い換えれば、 "@username"を引用符で囲みます。

+2

+1引用符なしでは文字列ではなく、単に 'username'変数を参照します(' @ '接頭辞は任意で変数名として予約語を使用できます) –

1

データベースがケースのパラメータよりも敏感である場合はケースを持って、感度

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

は@UserNameパラメータを持つ必要がありますプロシージャのケースに合わせます。

パスワードは当然同じです。

+0

それはとても有用で、実際には私の問題を解決しました。私はいつも@変数が私の変数への参照と考えています。 – smrpm

関連する問題