Comment faire un SELECT sur un SQL Server 2005 à partir d'un script Perl?Connexion à SQL Server 2005 à partir de Perl et exécution d'un SELECT
Répondre
Vous devez utiliser DBI et vous êtes probablement mieux à l'aide le fournisseur DBD :: ODBC de (CPAN). Si vous ne connaissez pas DBI, alors vous devez lire à ce sujet. Il y a un livre (Programming the Perl DBI) qui est ancien mais toujours valide.
Puis quelque chose comme ce qui suit:
use strict;
use warnings;
use DBI;
# Insert your DSN's name here.
my $dsn = 'DSN NAME HERE'
# 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;
Voici un exemple de base en utilisant DBI (modifié après un commentaire):
use DBI;
my $dbh = DBI->connect("dbi:Sybase:database=<dbname>;server=<servername>",
<user>, <password>,
{ PrintError => 0, RaiseError => 1 });
my $sth = $dbh->prepare("select field from table");
my $result = $sth->execute();
while(my $result = $sth->fetchrow_hashref) {
print $result->{field};
}
$sth->finish;
$dbh->disconnect;
espoir de voir d'autres réponses avec une solution plus simple :)
Vous ne généralement pas besoin de spécifier dbi_connect_method. Et je recommanderais d'utiliser "PrintError => 0, RaiseError => 1" pour que les erreurs SQL soient lancées ... d'autant plus que vous ne faites aucune vérification d'erreur;) Vous pouvez même raccourcir simplement en disant "pour mon $ row in (@ {$ dbh-> selectall_arrayref ("sélectionner un champ dans la table", {Slice => {}})}) {print "$ row -> {field} \ n";} Si vous êtes va utiliser fetchrow_hashref ou ses amis, vaut la peine de définir "FetchHashKeyName => 'NAME_lc'" lors de la connexion à la base de données aussi, certaines personnes insistent pour utiliser CamelCase pour les noms de colonnes Mais à part tout ça, très bien :) – araqnid
Bonnes suggestions, – Andomar
#
# ------------------------------------------------------
# run a passed sql and retun a hash ref of hash refs
# ------------------------------------------------------
sub doRunSqlGetHashRef {
my $self = shift ;
my $sql = shift ;
my $hsr_meta = {} ;
my $hsr = {} ;
my $rowid = 0 ;
my $flag_filled_hsr_meta = 0 ;
my $hsr_meta_colid = 0 ;
use DBI;
my $dbs = "dbi:ODBC:DRIVER=FreeTDS;DSN=DEV_MSSQLSRV_DSN";
# verify by :
# isql -v DEV_MSSQLSRV_DSN user pwd
my $dbh = DBI->connect($dbs, $db_user, $db_user_pw)
or die "CONNECT ERROR! :: $DBI::err $DBI::errstr $DBI::state $!\n";
if (defined($dbh)) {
# Prepare your sql statement (perldoc DBI for much more info).
my $sth = $dbh->prepare($sql) ;
# Execute the statement.
if ($sth->execute) {
# This will keep returning until you run out of rows.
while (my $row = $sth->fetchrow_hashref) {
# fill in the meta hash reference with the col names
if ($flag_filled_hsr_meta == 0) {
for (@{$sth->{ 'NAME' }}) {
# debug ok print "$_ => $row->{$_}\t";
$hsr_meta->{ $hsr_meta_colid } = $_ ;
$hsr_meta_colid++ ;
$flag_filled_hsr_meta = 1 ;
}
}
# p ($row) ; # row level debug ...
$hsr->{ $rowid } = $row ;
$rowid++ ;
}
}
# Done. Close the connection.
$dbh->disconnect;
# debug ok p($hsr_meta) ;
return ($hsr_meta , $hsr) ;
}
else {
print "Error connecting to database: Error $DBI::err - $DBI::errstr\n";
}
}
#eof sub doRunSqlGetHashRef
- 1. connexion SQL Server 2005 à partir d'Oracle
- 2. Connexion à MS SQL Server 2005 à partir de Mac en utilisant Ruby, ODBC et FreeTDS
- 3. Ruby Connexion à SQL Server 2005
- 4. Comment puis-je sécuriser la connexion à SQL Server à partir de DBI Perl?
- 5. Problème de connexion à l'instance nommée SQL Server 2005
- 6. Journal de connexion Sql Server 2005
- 7. Autorisations de connexion distantes SQL Server 2005
- 8. Interrogation d'Active Directory à partir de SQL Server 2005
- 9. Connexion à SQL Server à partir de la fenêtre cygwin expire, à partir de l'invite DOS fonctionne
- 10. SQL SELECT à partir de plusieurs tables
- 11. Comment puis-je sauvegarder les connexions et les travaux à partir de SQL Server 2005?
- 12. Obtention d'ensembles de lignes à partir de XQuery et SQL Server 2005
- 13. Extraction d'heures à partir d'un DateTime (SQL Server 2005)
- 14. SQL Server 2005 Authentification SQL Chaîne de connexion
- 15. SQL Server 2005: Importation de données à partir de SQL Server 2000
- 16. SQL Server 2005 et APP_DATA
- 17. Impossible de se connecter à SQL Server 2005 Db à partir du service Windows Vista x64
- 18. Créer XML à partir de données SQL Server 2005 à l'aide de FOR XML
- 19. Connexion à SQL Server 2008 avec PDO
- 20. SQL Server 2005 Replication
- 21. Connexion à SQL server2005 à partir d'ActionScript3
- 22. Résoudre le problème de connexion Sql Server 2005
- 23. Exécution du package SQL Server SSIS à partir de la procédure stockée
- 24. XML et Sql Server 2005
- 25. Restriction d'une instruction SELECT dans SQL Server 2005
- 26. Problème de connexion de VWD Express 2008 à SQL Server Express 2005
- 27. SQL Server 2005: Refuser l'accès à sp_prepexec
- 28. Installation de SQL Server Express 2008 côte à côte avec VS2008 et SQL Server Express 2005
- 29. Connexion à SQL Server avec ActiveRecord
- 30. SQL 2005 Express sur des problèmes de connexion SBS2008 à partir de machines Vista x32 SP2
Si vous utilisez une plate-forme Unix-ish, DBD :: ODBC risque d'être pénible, et il vaut probablement mieux utiliser DBD :: Sybase avec FreeTDS (Eh bien, UnixODBC a été assez douloureux la dernière fois que je l'ai essayé) – araqnid
@araqnid - J'allais mentionner FreeTDS mais j'ai décidé d'éviter de compliquer cela. J'ai eu la joie d'UnixODBC moi-même :) –