def METHOD_NAME():
    module = AnsibleModule(
        argument_spec=dict(
            dsn=dict(type='str', required=True, no_log=True),
            query=dict(type='str', required=True),
            params=dict(type='list', elements='str'),
            commit=dict(type='bool', default=True),
        ),
    )
    dsn = module.params.get('dsn')
    query = module.params.get('query')
    params = module.params.get('params')
    commit = module.params.get('commit')
    if not HAS_PYODBC:
        module.fail_json(msg=missing_required_lib('pyodbc'))
    # Try to make a connection with the DSN
    connection = None
    try:
        connection = pyodbc.connect(dsn)
    except Exception as e:
        module.fail_json(msg='Failed to connect to DSN: {0}'.format(to_native(e)))
    result = dict(
        changed=True,
        description=[],
        row_count=-1,
        results=[],
    )
    try:
        cursor = connection.cursor()
        if params:
            cursor.execute(query, params)
        else:
            cursor.execute(query)
        if commit:
            cursor.commit()
        try:
            # Get the rows out into an 2d array
            for row in cursor.fetchall():
                new_row = []
                for column in row:
                    new_row.append("{0}".format(column))
                result['results'].append(new_row)
            # Return additional information from the cursor
            for row_description in cursor.description:
                description = {}
                description['name'] = row_description[0]
                description['type'] = row_description[1].__name__
                description['display_size'] = row_description[2]
                description['internal_size'] = row_description[3]
                description['precision'] = row_description[4]
                description['scale'] = row_description[5]
                description['nullable'] = row_description[6]
                result['description'].append(description)
            result['row_count'] = cursor.rowcount
        except pyodbc.ProgrammingError as pe:
            pass
        except Exception as e:
            module.fail_json(msg="Exception while reading rows: {0}".format(to_native(e)))
        cursor.close()
    except Exception as e:
        module.fail_json(msg="Failed to execute query: {0}".format(to_native(e)))
    finally:
        connection.close()
    module.exit_json(**result)