如何在Windows中使用perl连接ms sql数据库?

时间:2014-01-21 06:07:16

标签: sql-server perl odbc

我想通过perl语言连接ms sql数据库。我做了以下步骤。

  • 我创建了名为“SampleDb”
  • 的数据库表
  • 已配置ODBC并且我已将sql server驱动程序的名称设置为“SampleDb”
  • 现在我尝试连接如下,

my $dbs = "dbi:ODBC:DRIVER={SQL Server};SERVER={SampleDb}";
my $dbh = DBI->connect($dbs, "username", "password");

但是现在我收到了以下错误

DBI connect('DRIVER={SQL Server};SERVER={SampleDB}','username',...) failed: [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (SQL-08001) [state was 08001 now 01000]
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (SQL-01000)

如何解决这个问题?要么 如何通过ODBC使用perl连接ms sql?

2 个答案:

答案 0 :(得分:4)

这个问题已经得到解答(并被接受!!)。只是提供了使用ODBC在Linux上运行的perl连接MSSQL服务器的详细步骤。

在进入perl之前,需要在Linux机器上安装和配置odbc环境。

安装在以下软件包中:

Fedora:
    unixODBC-devel.i686 
    unixODBC.i686
    AND
    freetds.i686 
    freetds-devel.i686 
    freetds-doc.i686
Ubuntu:
    unixodbc 
    unixodbc-dev
    AND
    freetds-bin 
    freetds-common  
    freetds-dev
    tdsodbc

安装这些软件包后,我们必须能够使用freetds来测试MS SQL服务器的身份验证网络身份验证。

root@ubuntu:/home# tsql -S <db_host_name> -p 1433 -U perluser -P password
locale is "en_IN"
locale charset is "UTF-8"
1>

如果上述操作失败,请检查此用户的MSSQL db权限。还要检查MSSQL日志。在成功运行上述命令之前,请勿继续。此外,上述命令失败与unixodbc OR freetds配置无关。

配置odbc.iniodbcinst.ini以及freetds.conf个文件。

/etc/odbc.ini将包含DSN信息:

root@ubuntu:/home# cat /etc/odbc.ini 
[odbc-test]
Description     = test
Driver          = ms-sql
Servername      = ms-sql
Database        = <db_name>
UID             = perluser
Port            = 1433
  • 请注意,Driver字段指的是名为/etc/odbcinst.ini的{​​{1}}上下文。
  • [ms-sql]字段指的是Servername上下文,我也将其命名为/etc/freetds.conf
  • [ms-sql]字段是可选的,但我正在使用它,因为我想连接到特定的数据库。

Database文件包含驱动程序信息:

/etc/odbcinst.ini
  • root@ubuntu:/home# cat /etc/odbcinst.ini [ms-sql] Description = TDS Conection Driver = /usr/lib/odbc/libtdsodbc.so Setup = /usr/lib/odbc/libtdsS.so UsageCount = 1 FileUsage = 1 文件只是将odbcinst.ini文件定向到相应的驱动程序。
  • Fedora的odbc.iniDriver条目分别为Setup/usr/lib/libtdsodbc.so
  • 此外,对于64位Linux盒子,它分别是/usr/lib/libtdsS.soDriver64而不是Setup64Driver

配置Setup(Fedora的/etc/freetds/freetds.conf)。它包含TDS信息。这是我的:

/etc/freetds.conf
  • 请注意,上面的上下文名称root@ubuntu:/home# tail /etc/freetds/freetds.conf [ms-sql] host = <db_host_name> port = 1433 tds version = 7.0 dump file = /var/log/freetds.log [ms-sql]Servername的值。

使用odbc.ini命令连接MSSQL服务器来测试配置:

isql
  • root@ubuntu:/home# isql -v odbc-test perluser password +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> 命令的odbc-test部分已在isql文件中定义。
  • 您必须收到上述输出odbc.ini。如果不这样做,那么您的配置会出现问题并再次执行上述所有步骤。

现在,

然后在perl代码中使用ODBC,如下所示:

Connected!

希望这有助于。

答案 1 :(得分:1)

这是用于在Windows中使用perl连接MSSQL。

尝试OLEDB而不是ODBC。以下代码将为您提供帮助。

my $host = 'sample\sql';
my $database = 'SampleDB';
my $user = 'sa';
my $auth = 'password';

$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";

参考How to connect Ms Sql using Perl