ruby-dbi から MS SQLServer に接続する
ruby-dbi を使うときのメモのはずが汎用的な説明になってるメモ。
linux から SQLServer に接続するときは、ODBC 経由が一般的なようです。
unixODBC と FreeTDS をインストールすれば、とりあえずは OK。
こんな感じでつながります。
+---------------------+ +---------------------+ | Linux | | Windows Server + +---------------------+ +---------------------+ + FreeTDS | ---------> | SQLServer | +---------------------+ +---------------------+ + unixODBC | +-----------+---------+ + dbd(ODBC) | その他 | +-----------+---------+ + dbi | +---------------------+ + ruby | +---------------------+ + アプリ | +-------------------- +
FreeTDS の準備
unixODBC の準備
設定の確認
isql コマンドが使えます。
testserver 上のお試し用 SQLServer に接続する例を以下に示します。
myhost$ pwd /home/yuji myhost$ cat .freetds.conf [global] tds version = 4.2 text size = 64512 [dbtest] host = 192.168.xxx.yyy port = 1433 tds version = 7.0 client charset = UTF-8 myhost$ cat .odbc.ini [ODBC Data Sources] testdb = hoge [testds] Driver = FreeTDS Description = test database server Servername = dbtest Database = app myhost$ isql testds hoge hoge -v +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select count(*) from EMP; +------------+ | | +------------+ | 290 | +------------+ SQLRowCount returns 1 1 rows fetched SQL> quit
ruby-dbi からの確認
irb でさくっと確認する。
DBI.connect の接続識別子は、"dbi:ドライバ:データソース" という書き方をします。
jdbc と似たようなもんです。
myhost$ irb -rdbi irb(main):001:0> dbh = DBI.connect('dbi:odbc:testds','hoge','hoge') => #<DBI::DatabaseHandle:0xb7b8f468 @trace_output=#<IO:0xb7cd555c>, @trace_mode=2, @handle=#<DBI::DBD::ODBC::Database:0xb7b67eb8 @attr={}, @handle=#<ODBC::Database:0xb7b67ee0>>> irb(main):002:0> dbh.select_all "select count(*) from EMP" => [[290]] irb(main):003:0> dbh.disconnect => nil irb(main):004:0> quit