2009-12-23 5 views
2

Je sais qu'il ya une question similaire: Connect to SQL Server 2005 from Perl and do a SELECT, mais j'ai essayé la réponse acceptée et je suis incapable de le faire fonctionner.comment se connecter à SQL Server avec Perl

En supposant que j'ai un test db nommé, et je serais ravi de faire une sélection de matable (select id, name from mytable)

code

est à partir du lien ci-dessus avec dsn mise à jour:

use strict; 
use warnings; 
use DBI; 

# Insert your DSN's name here. 
my $dsn = 'database=test' 

# Change username and password to something more meaningful 
my $dbh = DBI->connect("DBI::ODBC::$dsn", 'username', 'password') 

# Prepare your sql statement (perldoc DBI for much more info). 
my $sth = $dbh->prepare('select id, name from mytable'); 

# Execute the statement. 
if ($sth->execute) 
{ 
    # This will keep returning until you run out of rows. 
    while (my $row = $sth->fetchrow_hashref) 
    { 
     print "ID = $row->{id}, Name = $row->{name}\n"; 
    } 
} 

# Done. Close the connection. 
$dbh->disconnect; 

C'est ce que je obtenu lors de l'exécution du script: Impossible de se connecter à la source de données 'ODBC :: database = test' car je n'arrive pas à définir le pilote à utiliser (il ne semble pas contenir de préfixe 'dbi: driver:' et le DBI_DR IVER env var n'est pas défini) à la ligne script.pl 9

On dirait que le problème est dans le dsn mais je n'ai aucune idée de comment le réparer (je suis sur SQL 2005, perl 5.10 active et Windows XP).

Modifier: J'ai utilisé le code suivant pour vérifier si ODBC est installé. utilisez DBI;

print join (", ", DBI->installed_versions); 

Sortie: Il ressemble à ODBC est en effet dans la liste.

ADO, CSV, DBM, ExampleP, File, Gofer, ODBC, SQLite, Sponge, mysql 

Que manque-t-il?

+0

Avez-vous DBD :: ODBC installé? – mopoke

+0

Oui, j'ai DBD :: ODBC instaleld. Vérifié –

+0

Des suggestions? –

Répondre

0

Essayez la configuration de votre source de données à quelque chose comme:

my $dbh = DBI->connect("dbi:ODBC:test", 'username', 'password') 

Si cela ne fonctionne pas, assurez-vous DBD :: ODBC installé en exécutant:

perl -MDBI -e 'DBI->installed_versions;' 
+0

J'ai essayé votre solution et ne fonctionne pas, ODBC est dans la liste lors de l'exécution du code. Puisque je ne peux pas poster de code ici, s'il vous plaît voir mon code dans la réponse. –

+0

Impossible de se connecter à la source de données 'ODBC :: test' car je n'arrive pas à déterminer quel pilote t o utiliser (il ne semble pas contenir de préfixe 'dbi: driver:' et le DBI_DRIVER env var est non défini) à script.pl ligne 6 –

+0

Ci-dessus est ce que j'ai eu après l'application de votre code. –

2

j'ai eu la même erreur avec SQLite juste maintenant, et il semble que vous ayez fait la même chose que moi. Notez que le nombre de colons dans le premier argument - c'est le format incorrect:

my $db = DBI->connect('DBI::SQLite::dbname=testing.db', '', '', {RaiseError => 1, AutoCommit => 1}); 

Il devrait en fait seulement deux-points, pas deux paires de deux points dans le premier argument:

my $db = DBI->connect('DBI:SQLite:dbname=testing.db', '', '', {RaiseError => 1, AutoCommit => 1}); 

Question répondu en dépit de son âge, car il est encore haut des résultats dans Google pour ce message d'erreur particuler

0

Supposons que le serveur SQL est situé sur le serveur local, con nection ci-dessous peut être droite:

my $DSN = "driver={SQL Server};Server=127.0.0.1;Database=test;UID=sa;PWD=123456"; 
my $dbh = DBI->connect("dbi:ODBC:$DSN"); 
Questions connexes