2012-05-28 5 views
3

MVP 패턴 프로그래밍을 사용하고 있습니다. Task 클래스에서이 함수를 호출하려고합니다. 매퍼 클래스 Mapper 클래스의 예외 범위를 벗어나는 인수

private List<ValuePair > DisplayUserRole(string sName) 
      { 
       MySqlConnection connection = DbAccess.OpenConnection(ConnectionStringName.LabTrack); 
       _mapper1 = new UserAuthorizationMapper(connection); 

       int ixCustomer=1; 
       int ixProgram=1; 
       int ixWorkPackage=1; 
       int ixActivity=1; 
       string ixUsercode="626e28e8-e67a-4d11-8d2c-129d0ab79e96"; 

       bool isUserAuthorized = _mapper1.IsUserAuthorised(sName, ixCustomer, ixProgram, ixWorkPackage, ixActivity, ixUsercode); 

       List<ValuePair> listUserRoleValuePair = new List<ValuePair>(); 
       var ixUserList= _mapper1.FindUserRoleLike(sName,ixCustomer,ixProgram,ixWorkPackage,ixActivity); 
       User user = null; 

       foreach (var ixUser in ixUserList) 
       { 
        user = new UserMapper(connection).FindById(ixUser); 
        if (user != null) 
        { 
         var name = user.SFirstName + " " + user.SLastName; 
         listUserRoleValuePair.Add(new ValuePair(ixUser, name)); 
        } 

       } 
       return listUserRoleValuePair;  
}  

나는 "인덱스 및 길이는 문자열이있는 위치를 참조해야합니다"라고 선택 쿼리에 ArgumentoutofRangeException을 얻고있다.

public bool IsUserAuthorised(string userRole, int ixCustomer, int ixProgram, int ixWorkPackage, int ixActivity, string ixUser) 
      { 
       bool result = false; 
       SelectAll(Cmd(@"SELECT CASE WHEN Count(*)>=1 THEN 'True' "+ 
          " ELSE 'False' END AS IsUserAuthorised " + 
          " FROM (SELECT ua.ixUserAuthorization FROM tblechecklistuserroleassignmentxref ra "+ 
          " INNER JOIN tblechecklistuserrole ur ON ur.ixUserRole=ra.ixUserRole AND ur.sname='?0' "+ 
          " INNER JOIN tblechecklistuserauthorization ua ON au.ixUserAuthorization=ra.ixUserAuthorization "+ 
          " AND ua.ixcustomer='?1'AND ua.ixprogram='?2'AND ua.ixworkpackage='?3'AND ua.ixactivity='?4' "+ 
          " AND ua.ixUser='?5') a ", 
          userRole, 
          ixCustomer, 
          ixProgram, 
          ixWorkPackage, 
          ixActivity, 
          ixUser),                    
          delegate(MySqlDataReader reader) 
          { 
result=Convert.ToBoolean(GetDbValue<string>(reader,"isUserAuthorised")); 

                 }); 
       return result; 

      } 

코드가 실행되도록 내 쿼리를 수정하는 방법.

답변

1

당신의 오류보다는 결과의 검색 쿼리와 함께 할 추측.

public bool IsUserAuthorised(string userRole, int ixCustomer, int ixProgram, int ixWorkPackage, int ixActivity, string ixUser)   
    {    
    bool result = false;  
    SelectAll(Cmd(@"SELECT CASE WHEN Count(*)>=1 THEN 'True' ELSE 'False' END AS IsUserAuthorised " +        
" FROM (SELECT ua.ixUserAuthorization FROM tblechecklistuserroleassignmentxref ra "+       
    " INNER JOIN tblechecklistuserrole ur ON ur.ixUserRole=ra.ixUserRole AND ur.sname=?0 "+       
    " INNER JOIN tblechecklistuserauthorization ua ON au.ixUserAuthorization=ra.ixUserAuthorization "+   
         " AND ua.ixcustomer=?1 AND ua.ixprogram=?2 AND ua.ixworkpackage=?3AND ua.ixactivity=?4 "+  
         " AND ua.ixUser=?5) a ",        userRole,      
     ixCustomer, 
     ixProgram, 
     ixWorkPackage, 
     ixActivity,        ixUser),                           delegate(MySqlDataReader reader)  

{ 

result = Convert.ToBoolean (GetDbValue (reader, "isUserAuthorised")));

        });    

반환 결과;
}

1

result=Convert.ToBoolean(GetDbValue<string>(reader,"IsUserAuthorised")); (capitalised) 

result=Convert.ToBoolean(GetDbValue<string>(reader,"isUserAuthorised")); 

요구의 simeple이 아니다?

임 물음표 후 어떤 작은 따옴표가 없습니다 ...

관련 문제