> > 
> > The only situation I've seen that can be a little confusing is this:
> > 
> > DBI->connect('dbi:ODBC:dsnname', 'dbuser', 'dbpass')
> > 
> > works
> > 
> > and
> > 
> > DBI->connect('dbi:ODBC:DSN=dsnname', 'dbuser', 'dbpass')
> > 
> > fails with whatever message the database engine returns for invalid 
> > user/password (in MS SQL Server it is something to do with 
> NULL user).
> > 
> > First time I hit this it took a little head scratching to work out 
> > what was going on. In the first case SQLConnect('dsnname', 
> 'dbuser', 
> > 'dbpass') is called and as the database engine required a 
> > username/password all was OK. In the second case 
> SQLDriverConnect(..., 
> > "DSN=dsnname", ...) was called and I got the NULL user 
> error. Adding 
> > ";UID=dbuser;PWD=dbpass;" to the "DSN=dsnname" fixes the 
> problem but 
> > it can be a little confusing if you don't recognise the problem.
> > 
> > Perhaps a note about this in the docs might help.
> 
> Or better still, the DBD::ODBC driver could add 
> ";UID=dbuser;PWD=dbpass;" to the $dsn automatically if it 
> sees that it matches /\bDSN=/.

Hmm...wouldn't it be better to add before all SQLDriverConnect actions
if (defined($uid) && !($dsn =~ /UID=/))
?? (and leaving DSN alone if we're going to call SQLConnect(), since
that is second in the sequence...

I would think this would be safer than just checking for DSN=

Jeff


Reply via email to