2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DBD::ODBCとFreeTDSを使ってDSN lessでSQL Serverへ接続する

Last updated at Posted at 2016-01-12

内容

odbcとfreetdsを利用したsql serverへの接続方法を紹介する記事は多いです。

それらの記事は、sql serverの接続情報(IP アドレス、ポート番号等)を別ファイルに予め定義しておき、
その定義された設定を利用してsql serverに接続するというものでした。

この方法では予め接続するDBが限定されているケースでは有効ですが、接続DBが限定されないケースでは
不都合です。

ソースコード内で接続する情報(IP アドレス、ポート等)を動的に設定したいケースがありましたので、
その方法を紹介します。

ここでは/etc/odbc.iniやfeetds.confの設定情報を参照しないで、FreeTDSとDBD::ODBCを利用した DSN lessな接続方法を紹介します。

環境

  • CentOS 6.7 64bit
  • unixODBC 2.2.14
  • freetds v0.91

手順

下記を順に実行する

  • unixodbc, freetdsのインストール
sudo yum install unixODBC-devel.x86_64
sudo yum install freetds-devel.x86_64
  • driver情報の登録
    /etc/odbcinst.iniに以下を追加
[FreeTDS]
Description             = FreeTDS for SQL Server
Driver64                = /usr/lib64/libtdsodbc.so
Setup64         = /usr/lib64/libtdsS.so
FileUsage               = 1
CPTimeout               = 5
CPReuse         = 5
UsageCount              = 1
  • DBD::ODBCのインストール
cpanm DBI
cpanm DBD::ODBC

サンプルコードの実行

以下のスクリプトを実行する


use strict;
use warnings;

use utf8;
use DBI;
use Data::Dumper;

# DB名:sample_db
# ログインID:sa
# パスワード:password

my $dsn = "dbi:ODBC:DRIVER={FreeTDS};Server=192.168.56.100;Database=sample_db;Port=1433;";
    #"Trusted_Connection=yes;". # yesだとWindows認証
    #"AutoTranslate=No;";

my $dbh=DBI->connect($dsn.'uid=sa;'.'pwd=password') or die $!;

my $sql = "
select * FROM test
";
my $sth=$dbh->prepare($sql) or die $dbh->errstr;

# 出力エラー対策
$sth->{LongTruncOk}=1;
$sth->{LongReadLen}=2000000;

$sth->execute or die $dbh->errstr;

while(my $arrayref = $sth->fetchrow_arrayref){
        print Dumper $arrayref;
}

$sth->finish;
$dbh->disconnect;

日本語の後半部分が見切れる問題に関して

日本語が格納されている列ではデータの後半部分が見切れる問題があります。
DBD::ODBCがデフォルトではUnicodeサポートがされないためです。(*参考文献 Enabling and Disabling Unicode supportを参照)

データベース内で日本語を格納している場合は、以下の手順1,もしくは手順2でDBD::ODBCをインストールして下さい。

  • DBD::ODBCインストール手順1

cpanm DBD::ODBC --configure-args="-u"

  • DBD::ODBCインストール手順2
cpanm DBD::ODBC --look
perl Makefile.PL -u
make
make test
make install

tsqlによる接続

FreeTDS 付属のtsqlコマンドでSQL Serverサーバへ接続することも可能です。

$ tsql -I FreeTDS -S 192.168.56.100 -D sample_db -P 1433 -U sa -P password

参考文献

以上

CHANGELOG

2016/12/16 日本語が見切れる問題を追加
2016/12/13 tsql 追加, 段落、タイトル修正

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?