Показать сообщение отдельно
Старый 07.07.2017, 07:18   #20  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Когда мне надоело каждый раз писать обёртку try/catch со всякими assert permissions, я написал вот такой класс. В принципе - этого более чем достаточно для работы на чистом SQL. Думаю, код написан достаточно прозрачно, поясню только, что статические методы нужно использовать, если Connection и Statement не понадобятся при дальнейшем использовании. В противном случае, лучше создать экземпляр класса и использовать одно подключение, пока не закончим работать на SQL.
X++:
final class PPO_SafeSQL
{
    #define.InsufficientRights("Недостаточно прав для выполнения операции")

    Connection  connection;
    Statement   statement;
}

public void new()
{
;
    connection  = new Connection();
    statement   = connection.createStatement();
}

public server static ResultSet runQuery(str _sql)
{
    return new PPO_SafeSQL().executeQuery(_sql);
}

public server static void runUpdate(str _sql)
{
    new PPO_SafeSQL().executeUpdate(_sql);
}

public ResultSet executeQuery(str _sql)
{
    ResultSet ret;

    try
    {
        new SqlStatementExecutePermission(_sql).assert();

        // BP deviation documented
        ret = statement.executeQuery(_sql);

        CodeAccessPermission::revertAssert();
    }
    catch (Exception::CodeAccessSecurity)
    {
        throw error(#InsufficientRights);
    }

    return ret;
}

public void executeUpdate(str _sql)
{
    try
    {
        new SqlStatementExecutePermission(_sql).assert();

        // BP deviation documented
        statement.executeUpdate(_sql);

        CodeAccessPermission::revertAssert();
    }
    catch (Exception::CodeAccessSecurity)
    {
        throw error(#InsufficientRights);
    }
}
__________________
// no comments

Последний раз редактировалось dech; 07.07.2017 в 07:27.