2013-01-10 4 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의 역할 공급자 저장 프로 시저를 사용하여 DB에 존재 아닌지 확인하려고하는 것은입니다 내가 역할 예 admin을 추가하고 SP를 실행할 때 수동으로

DECLARE @return_value int 

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

SELECT 'Return Value' = @return_value 

같은 데이터베이스에서 그것은 나에게 정확한 결과를 제공하지만 응용 프로그램에서 내가 문

(int)sqlCommand.Parameters["@ReturnValue"].Value 
,536에게 다시 역할 admin을 추가하려고하면

항상 내게 0주세요. 사람이 동작은 저장 프로 시저에 의해 예상 값을 반전하기 때문에 더 가능성이 높습니다

+0

중복 http://stackoverflow.com/questions/5412256/return-value-using-sqlcommand –

+0

@SebastianMeine하지만' –

+0

을 SafeDataReader'로 메신저 종류의 모든 클래스를 사용하지 않는 당신이 ... –

답변

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이다. –