欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Windows和Linux系统下perl连接SQL Server数据库的方法

程序员文章站 2022-04-29 19:16:02
本文将提供一些perl连接microsoft sql server数据库的实例。perl脚本运行在windows和linux平台。 windows平台 如果在windo...

本文将提供一些perl连接microsoft sql server数据库的实例。perl脚本运行在windows和linux平台。

windows平台

如果在windows平台下运行perl脚本,建议使用依赖dbi的两个模块包,提供标准的数据库接口模块。

dbd::odbc
dbd::ado

使用dbd::odbc

如果选用dbd::odbc,下面的实例代码将展示如何连接到sql server数据库:


use dbi;
 
# dbd::odbc
 
my $dsn = 'dbi:odbc:driver={sql server}';
my $host = '10.0.0.1,1433';
my $database = 'my_database';
my $user = 'sa';
my $auth = ‘s3cr3t';
 
# connect via dbd::odbc by specifying the dsn dynamically.
my $dbh = dbi->connect("$dsn;server=$host;database=$database",
 $user,
 $auth,
 { raiseerror => 1, autocommit => 1}
 ) || die "database connection not made: $dbi::errstr";
 
#prepare a sql statement my $sql = "select id, name, phone_number from employees ";
my $sth = $dbh->prepare( $sql );
 
#execute the statement
$sth->execute();
 
my( $id, $name, $phone_number );
 
# bind the results to the local variables
$sth->bind_columns( undef, \$id, \$name, \$phone_number );
 
#retrieve values from the result set
while( $sth->fetch() ) {
 print "$id, $name, $phone_number\n";
}
 
#close the connection
$sth->finish();
$dbh->disconnect();

你还可以使用预先设置的一个系统dsn来连接。要建立一个系统dsn,可以这样访问控制面板->管理工具->数据源。

使用系统dsn连接,需要更改连接字符串。如下所示:


# connect via dbd::odbc using a system dsn
my $dbh = dbi->connect("dbi:odbc:my_system_dsn",
 $user,
 $auth,
 {
 raiseerror => 1,
 autocommit => 1
 }
 ) || die "database connection not made: $dbi::errstr";

使用dbd::ado

如果选择dbd::ado模块,下面的实例展示如何连接到sql server数据库。


use dbi;
 
my $host = '10.0.0.1,1433';
my $database = 'my_database';
my $user = 'sa';
my $auth = ‘s3cr3t';
 
# dbd::ado
$dsn = "provider=sqloledb;trusted connection=yes;";
$dsn .= "server=$host;database=$database";
my $dbh = dbi->connect("dbi:ado:$dsn",
 $user,
 $auth,
 { raiseerror => 1, autocommit => 1}
 ) || die "database connection not made: $dbi::errstr";
 
#prepare a sql statement
my $sql = "select id, name, phone_number from employees "; my $sth = $dbh->prepare( $sql );
 
#execute the statement
$sth->execute();
 
my( $id, $name, $phone_number );
 
# bind the results to the local variables
$sth->bind_columns( undef, \$id, \$name, \$phone_number );
 
#retrieve values from the result set
while( $sth->fetch() ) {
 print "$id, $name, $phone_number\n";
}
 
#close the connection
$sth->finish();
$dbh->disconnect();

linux平台

如果是在linux平台下运行perl脚本,连接sql server数据库需要使用到dbd::sybase包。

安装sql server支持库

sybase dbd包依赖freetds驱动程序。

freetds下载地址:www.freetds.org

安装freetds驱动的说明文档参见:http://www.freetds.org/userguide/config.htm

该驱动没有使用到odbc.

配置数据源

修改freetds.conf文件包括sql server数据库信息,如下所示:


[ss_my_db]
host = 10.0.0.1 # or host name port = 1433
tds version = 7.0

安装sybase dbd模块

该模块文档参见:http://search.cpan.org/~mewp/dbd-sybase/sybase.pm

此外,需要将sybase环境变量应设置为freetds安装路径,export sybase=/usr/local/freetds

使用sybase dbi和sql server dsn实例


# load the dbi module
use dbi;
use dbd::sybase;
 
my $database="my_database";
my $user="sa";
my $auth="s3cr3t";
 
begin
{
 $env{sybase} = "/usr/local";
}
 
# connect to the sql server database
my $dbh = dbi->connect("dbi:sybase:server=ss_my_db;database=$database",
 $user,
 $auth
 {raiseerror => 1, autocommit => 1}
 ) || die "database connection not made: $dbi::errstr";
 
#prepare a sql statement
my $sql = "select id, name, phone_number from employees";
my $sth = $dbh->prepare( $sql );
 
#execute the statement
$sth->execute();
 
my( $id, $name, $phone_number );
 
# bind the results to the local variables
$sth->bind_columns( undef, \$id, \$name, \$phone_number );
 
#retrieve values from the result set
while( $sth->fetch() ) {  print "$name, $title, $phone\n";
}
 
#close the connection
$sth->finish();
undef $sth; # this fixes a segfault bug with certain versions of dbd::sybase
$dbh->disconnect();