Ruby で SQL server に接続できたのでメモ。
#!ruby -Ks require 'win32ole' module OpenRecordset def [] field self.Fields.Item(field).Value end def []= field,value self.Fields.Item(field).Value = value end def each_record if self.EOF or self.BOF return end self.MoveFirst until self.EOF or self.BOF yield self self.MoveNext end end end class ADODB def initialize(provider,host,db_name,uid,passwd) @ado = WIN32OLE.new("ADODB.Connection") @connstr = "Provider=#{provider};Password=#{passwd};User ID=#{uid};Initial Catalog=#{db_name};Data Source=#{host}" end def startADO begin @ado.Open @connstr rescue raise "接続出来ません。処理を終了します。#{@connstr}" end begin yield @ado ensure @ado.Close end end def sql_read(sql) db_dat = [] startADO do |cn| fields = Array.new begin rs = cn.Execute(sql) rs.extend OpenRecordset (0...rs.Fields.Count).each{|i| fields.push rs.Fields(i).Name } rs.each_record do |rs| values = fields.map{|field| rs[field] } read_hash = Hash.new n = 0; values.each{|dat| read_hash[fields[n]]= dat;n+=1} db_dat.push read_hash end rescue raise "SQL:#{sql} を実行出来ません。処理を終了します。" end end db_dat end end provider = "SQLNCLI.1" # provider= "SQLOLEDB.1" server = "192.168.1.123" port = 1433 host="tcp:#{server},#{port}" ado = ADODB.new(provider,host,"bd_name","user","password") p ado.sql_read("SELECT * FROM tbl")
プロバイダは SQLNCLI でも、SQLOLEDB でも OK だが違いを理解していません。