3

MVP パターン プログラミングを使用しています。Task クラスでは、関数を呼び出しています。

   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;

            }

実行するコードを取得するためにクエリを変更する方法。

4

2 に答える 2

1

の単純なケースではありませんか

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

する必要があります

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

あなたのエラーは、クエリではなく結果の検索に関係していると思います...

于 2012-06-13T20:38:18.403 に答える
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,"isUserAuthorized"));

                                  });               

結果を返します。
}

于 2012-08-06T07:33:55.170 に答える