perl连接sqlserver
下载相关软件 unixODBC、freetds和DBD-ODBC?
需要下载3个文件:? ? ? Linux系统的ODBC:unixODBC-2.3.1.tar.gz ( http://www.unixodbc.org)? ? ? 连接SQLServer或Sybase的驱动:freetds-0.82.tar.gz ( http://www.freetds.org)? ? ? perl的ODBC模块 :cd DBD-ODBC-1.43.tar.gz ( http://cpan.perl.org)? 安装和配置 1、安装unixODBC# tar vxzf unixODBC-2.3.1.tar.gz# cd unixODBC-2.3.1 # ./configure --prefix=/usr/local/unixODBC # make # make install 2、安装freetds# tar vxzf freetds-0.82.tar.gz # make 3、安装DBI 模块安装DBI前需要安装: Warning: Will not be able to run tests as you have not defined ? $ tar vxzf DBD-ODBC-1.616.tar.gz 4、安装DBD-ODBC?? ?在安装之前要先设置一下环境变量 #export LD_LIBRARY_PATH=/usr/local/unixODBC/lib 5、配置freetds#pwd [root@sggp bin]# ./tsql -H 192.168.1.127 -p 1433 -U sa -P 11
6、配置unixODBC# cd /usr/local/unixODBC/etc--向ODBC添加SQLServer驱动 # vi odbcinst.ini #####加入如下内容 [FreeTDS] Driver=/usr/local/freetds/lib/libtdsodbc.so Setup=/usr/local/freetds/lib/libtds.so FileUsage=1 # vi odbc.ini [Server1];DSN名称 Driver = FreeTDS ? ;与上边的FreeTDS相对应 Server = ##隐去的服务器地址## Port = ##隐去的端口号## TDS_Version = 8.0 ? ;这个东西必须加,否则会给你报个什么unexpect EOF~~~这个东西小弟找了快2小时。。。 [Server1] Driver = FreeTDS Server = 192.168.251.218 Database = sg0157 Port = 1433 TDS_Version = 8.0 # odbcinst -q -d? [PostgreSQL] [MySQL] [PostgreSQL64] [MySQL64] #? 保存并退出,测试ODBC的连接 # /usr/local/unixODBC/bin/isql -v Server1 sa 11 +---------------------------------------+ | Connected! ? ? ? ? ? ? ? ? ? ? ? ? ? ?| | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | | sql-statement ? ? ? ? ? ? ? ? ? ? ? ? | | help [tablename] ? ? ? ? ? ? ? ? ? ? ?| | quit ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | +---------------------------------------+ SQL>? SQL> select count(1) from "xxx".tb1 +------------+ | ? ? ? ? ? ?| +------------+ | 1729 ? ? ? | +------------+ SQLRowCount returns 1 1 rows fetched SQL>? SQL> quit 测试通过. 开始测试perl能否正确使用ODBC ,在使用perl连接ODBC之前要做些准备工作,把ODBC的共享库都复制到/usr/lib目录 # cp /usr/local/unixODBC/lib/libodbc.* /usr/lib 8、perl脚本测试能否成功Crontab 中运行需要在perl脚本的最前面加入以下代码: set ENV{'LD_LIBRARY_PATH'}='/usr/local/freetds/lib:/usr/local/unixODBC/lib:'; set ENV{'ODBCHOME'}='/usr/local/unixODBC'; set ENV{'SYBASE'}='/usr/local/freetds'; # vi test.pl #!/usr/bin/perl use DBI; my $dbh=DBI->connect('dbi:ODBC:Server1','sa','11'); my $sth=$dbh->prepare("select * from "xxx".tb1"; $sth->execute(); while (@data=$sth->fetchrow_array()){ print "$data[0] $data[1] $data[2]n"; } #!/usr/bin/perl use DBI; $dbh=DBI->connect('dbi:ODBC:Server1','11'); my $sth=$dbh->prepare("select * from tb1"); $sth->execute(); while (@data=$sth->fetchrow_array()){ print "$data[0] $data[1] $data[2]n"; } ? 保存退出 # perl test.pl 如果可以看到数据库中的记录,就说明可以正常使用ODBC perl了。 #!/usr/bin/perl # lookinc - where to look for modules $"="n"; print "@INCn"; my $dbh=DBI->connect("DBI:ODBC:ODBC-SQL-test","用户名","密码") or die "Can't connect to LocalSQL"; [root@pc02 oracle]# perl t01.pl install_driver(ODBC) failed: Can't locate DBD/ODBC.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at (eval 3) line 3. Perhaps the DBD::ODBC perl module hasn't been fully installed,or perhaps the capitalisation of 'ODBC' isn't right. Available drivers: DBM,ExampleP,File,Gofer,Proxy,Sponge. ?at t01.pl line 3 [root@pc02 oracle]#? [root@pc02 oracle]# perl t01.pl? install_driver(ODBC) failed: Can't load '/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBD/ODBC/ODBC.so' for module DBD::ODBC: libodbc.so.2: cannot open shared object file: No such file or directory at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/DynaLoader.pm line 230. ?at (eval 3) line 3 Compilation failed in require at (eval 3) line 3. Perhaps a required shared library or dll isn't installed where expected ?at t01.pl line 3 [root@pc02 oracle]#?(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |