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