2013-11-25 163 views
0

Perl非常新。我遇到了试图让DBI与SQL Server 2008数据库通信的问题。Perl DBI SQL SERVER连接性问题

当我尝试使用ODBC或直接尝试连接到SQL Servereveb时,出现以下错误。

我是新来的Perl,有人可以帮助...感谢

install_driver(MSSQL)失败:无法找到对象的方法 “set_sql” 通过一揽子 “类:: DBI :: MSSQL” 位于C :/Perl/lib/DBD/MSSQL.pm线79.编译失败在(EVAL 19)C需要:/Perl/site/lib/DBI.pm:744线3

use strict; 
use warnings; 
use diagnostics; 
use Class::DBI::Loader; 

use DBI; 

use File::Glob ':glob'; 


my $DBUserName      = "*******"; 
my $DBPassword      = "*******"; 
my $DBName       = "dbi:MSSQL:uat-dbserver1"; 

my $dbh       = ""; 
my $sqlStatement     = ""; 
my $sqlCmd       = ""; 

my @EasySetTableNames   =(); 



$dbh = DBI->connect($DBName, $DBUserName, $DBPassword, 
    { PrintError => 0, AutoCommit => 0}) 
     || die "Database connection creation failed: $DBI::errstr\n"; 

$sqlStatement = "SELECT * from tableA "; 
$sqlCmd = $dbh->prepare($sqlStatement); 
$sqlCmd->execute(); 
@EasySetTableNames = @{$dbh->selectcol_arrayref($sqlStatement)}; 
print "hi"; 

并通过ODBC

#!/usr/bin/perl -w 
use strict; 

use DBI; 

# Replace datasource_name with the name of your data source. 
# Replace database_username and database_password 
# with the SQL Server database username and password. 
my $data_source = "dbi:MSSQL:test"; 
my $user = "test"; 
my $password = "test"; 

# Connect to the data source and get a handle for that connection. 
my $dbh = DBI->connect($data_source, $user, $password) 
    or die "Can't connect to $data_source: $DBI::errstr"; 

# This query generates a result set with one record in it. 
my $sql = "SELECT 1 AS test_col"; 

# Prepare the statement. 
my $sth = $dbh->prepare($sql) 
    or die "Can't prepare statement: $DBI::errstr"; 

# Execute the statement. 
$sth->execute(); 

# Print the column name. 
print "$sth->{NAME}->[0]\n"; 

# Fetch and display the result set value. 
while (my @row = $sth->fetchrow_array) { 
    print "@row\n"; 
} 

# Disconnect the database from the database handle. 
$dbh->disconnect; 

任何帮助你可以提供将是如此赞赏。

+0

Re“DBI是否直接支持SQL SERVER?”这取决于个人DBD。大多数人不知道ODBC。 DBD :: ODBC是明显的例外。 – ikegami

+0

哼,您使用的DBD :: MSSQL在CPAN上不存在! – ikegami

+0

“Class :: DBI :: MSSQL”的文档表示在引擎盖下使用了'DBD :: ODBC'。 – tjd

回答

1

我通常从内部DBI使用ODBC驱动程序,这是我通常会打的SQL Server(2008 R2)

#!/export/appl/pkgs/perl/5.8.4-fiq/bin/perl 
    #!/usr/bin/perl 
    #!/bin/sh 

    use strict; 
    use DBI; 
    use Time::localtime; 
    use Data::Dumper; 

    my $dsn = 'DBI:ODBC:Driver={SQL Server}'; 
    my $host = 'xxx\yyy'; 
    my $database = 'testing'; 
    my $user = 'user'; 
    my $auth = 'password'; 


    my $dbh = DBI->connect("$dsn;Server=$host;Database=$database", $user, $auth) or die "Database connection not made: $DBI::errstr"; 

    my $sql = "EXECUTE database.schema.sproc"; 
    my $stmt = $dbh->prepare($sql); 
    $stmt->execute(); 
    $stmt->finish(); 
    $dbh->disconnect; 
+1

将'; Trusted_Connection = Yes'附加到连接字符串的末尾将使用登录用户的凭据连接到MSSQL服务器。优点:无需将证书保存在程序或其配置文件中。缺点:DBA需要保持最新的权限。 (有些人可能会认为这是他们的工作......) – tjd