我想通过perl语言连接ms sql数据库。我做了以下步骤。
,
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?
答案 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.ini
和odbcinst.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
文件定向到相应的驱动程序。odbc.ini
和Driver
条目分别为Setup
和/usr/lib/libtdsodbc.so
。/usr/lib/libtdsS.so
和Driver64
而不是Setup64
和Driver
。配置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";