For ADO...

        $dbms_name = $dbh->{ado_conn}->Properties('DBMS Name')->Value;
        $dbms_version = $dbh->{ado_conn}->Properties('DBMS Version')->Value;

I guess all these (in this thread) should be patched into the respective
DBD's.  

I suppose it would be nice to have handle methods for all DBD's:

$dbh->DBMS_name() and $dbh->DBMS_version()

As a short term measure you could use DBIx::AnyDBD to provide a seemless
interface.

Note that you must be careful about names and versions.  For example, an
Access database in my system reports "ACCESS: 03.50.0000" for ODBC and
ADO/MSDASQL but "MS Jet: 04.00.0000" for ADO/Microsoft.Jet.OLEDB.4.0.

Similarly, SQL Server 6.5 reports "Microsoft SQL Server: 06.50.0255" for
ODBC and ADO/MSDASQL but "Microsoft SQL Server: 06.50.0281" for
ADO/SQLOLEDB.

Here's an example routine to handle ODBC/ADO:

$driver = $dbh->{Driver}->{Name};
print "Driver: $driver\n";

if ($driver eq 'ODBC') {
        $dbms_name = $dbh->func(17, 'GetInfo');
        $dbms_version = $dbh->func(18, 'GetInfo');
}
elsif ($driver eq 'ADO') {
        my $provider = $dbh->{ado_conn}->{Provider};
        print "Provider: $provider\n";
        # These properties appear to work for all the providers I have tested
        # I guess we should really eval{} these just in case?
        $dbms_name = $dbh->{ado_conn}->Properties('DBMS Name')->Value;
        $dbms_version = $dbh->{ado_conn}->Properties('DBMS Version')->Value;
}       

print "$dbms_name: $dbms_version\n";

--
  Simon Oliver

Reply via email to