Ejecutar sentencias SQL contra BBDD de forma directa
Escrito por René Roca el . Posteado en X++En alguna ocasión, aunque no es nada recomendable, necesitamos ejecutar sentencias SQL directamente contra la base de datos desde Axapta sin pasar por el framework que utiliza Dynamics para ello.
Es posible que por ejemplo tengamos que hacer un drop table o algo parecido, para ello, crearemos en la clase Global, el siguiente método:
server static void DAXExecuteSQL(str _sql) { /* Método para ejecutar directamente sql sobre base de datos - www.dynamicsax.es */ str ddl = ''; SqlStatementExecutePermission ssep; Statement statement; Connection connection; ; ddl = _sql; connection = new Connection(); connection.ttsbegin(); ssep = new SqlStatementExecutePermission(ddl); ssep.assert(); statement = connection.createStatement(ResultSetType::Dynamic, ResultSetConcurrency::Updatable); // BP deviation documented statement.executeUpdate(ddl); connection.ttscommit(); }
Para utilizar el método desde cualquier parte de Axapta, simplemente tendremos que usar la siguiente llamada:
DAXExecuteSQL('Delete custTableTmp');
Esta llamada borrará la tabla CustTableTmp, igual que si lo ejecutáramos desde la consola de SQL Server