Когда мне надоело каждый раз писать обёртку 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);
}
}