2013-01-10 195 views
0

即時嘗試爲我的.Net應用程序實現自定義角色提供程序。我試着去檢查是否由用戶添加的角色在數據庫中已存在或者無法使用像捕獲存儲過程的返回值

SqlConnection sqlConnection = new SqlConnection(conn); 
SqlCommand sqlCommand = new SqlCommand("aspnet_Roles_RoleExists", sqlConnection); 
sqlCommand.CommandType = CommandType.StoredProcedure; 
sqlCommand.Parameters.Add("@RoleName", SqlDbType.VarChar, 256).Value = "/"; 
sqlCommand.Parameters.Add("@ApplicationName", SqlDbType.VarChar, 256).Value = roleName; 
sqlCommand.Parameters.Add("@ReturnValue", SqlDbType.Int,4).Direction = ParameterDirection.ReturnValue; 
try 
{ 
    sqlConnection.Open(); 
    sqlCommand.ExecuteNonQuery(); 
    int x = (int)sqlCommand.Parameters["@ReturnValue"].Value; 
    if ((int)sqlCommand.Parameters["@ReturnValue"].Value == 0) 
       ... 

的問題Asp.NET的角色提供的存儲過程是,當我添加的角色如admin並運行SP從數據庫中手工像

DECLARE @return_value int 

EXEC @return_value = [dbo].[aspnet_Roles_RoleExists] 
     @ApplicationName = N'/', 
     @RoleName = N'admin' 

SELECT 'Return Value' = @return_value 

它給了我正確的結果,但在應用程序,如果我嘗試再次添加的角色admin聲明

(int)sqlCommand.Parameters["@ReturnValue"].Value 

總是給我0。任何人都可以引導我到是什麼原因造成這種現象

+0

重複的http://stackoverflow.com/questions/5412256/return-value-using-sqlcommand –

+0

@SebastianMeine但即時不使用任何類的排序爲'SafeDataReader' –

+0

你有一個點那裏... –

回答

1

那是因爲你倒存儲過程的預期值更可能:

sqlCommand.Parameters.Add("@RoleName", SqlDbType.VarChar, 256).Value = "/"; 
sqlCommand.Parameters.Add("@ApplicationName", SqlDbType.VarChar, 256).Value = roleName; 

它應該是:

sqlCommand.Parameters.Add("@RoleName", SqlDbType.VarChar, 256).Value = roleName; 
sqlCommand.Parameters.Add("@ApplicationName", SqlDbType.VarChar, 256).Value = "/"; 

你是路過roleName作爲ApplicationName的參數。

+0

我沒有言語表達我的感激之情......上帝保佑你@lcarus –