Ruby连SQLserver的详细方法加测试程序

初学Ruby,哪位前辈可以指教一下Ruby连SQLserver的详细方法加测试程序?跪谢~刚申请的会员,只有这么点分了...
[b]问题补充:[/b]
没有lib/dbd
只有lib/dbi而且这个目录下没有ADO.rb啊
我下的是dbi-0.4.0.tar.gz
下错了吗?还是我没有找到?

[code="ruby"]require "dbi"
dbh=DBI.connect('DBI:ADO:Provider=SQLOLEDB;Connect Timeout=5;DataSource=localhost;Initial Catalog=SmileDemo;Persist SecurityInfo=True;User ID=ruby;Password=ruby;')
sth=dbh.prepare('select * from users')
sth.execute
while row=sth.fetch do
p row
end[/code]

测试脚本

1.下载ruby的DBI包,ruby-dbi.tar.gz,解压缩以后找到ruby-dbi安装目录下的lib/dbd下的ADO.rb源文件,复制。
2。找到ruby安装目录%ruby_home%/lib/ruby/site_ruby/1.8/DBD,新建一个ADO文件夹,
将刚才的ADO.rb文件粘贴到此目录。

http://rubyforge.org/projects/ruby-dbi/ 这是Ruyb DBI的地址
如果你是2005的话稍微有点麻烦,如果你是windows的话,可能需要改个文件
总之,大体流程这样,有什么问题,发log上来吧

下载0.2.2版

[code="ruby"]

#MSSQL
#require "dbi"
require "win32ole"
#WIN32OLE.codepage = WIN32OLE::CP_UTF8
require 'iconv'
Re_cn=/[\x7f-\xff]/

class MssqlDb
attr_accessor :mdb, :connection, :data, :fields

def initialize(host,mdb,user,pass)
@host= host
@mdb=@database= mdb
@username= user
@password= pass
@connection = nil
@data = nil
@fields = nil
end

def open

connection_string = "Provider=SQLOLEDB.1;User ID=#@username;password=#@password;Data Source=#@host,1433;Initial Catalog=#@mdb"
@connection = WIN32OLE.new('ADODB.Connection')
@connection.Open(connection_string)
# @password=''
end

def query(sql)
recordset = WIN32OLE.new('ADODB.Recordset')
recordset.Open(sql, @connection)
@fields = []
recordset.Fields.each do |field|
@fields << field.Name
end
begin
@data = recordset.GetRows.transpose
rescue
@data = []
end
recordset.Close
end

def queryGB(sql)
if sql=~ Re_cn
sql = utf8_to_gb(sql)
end
recordset = WIN32OLE.new('ADODB.Recordset')
recordset.Open(sql, @connection)
@fields = []
recordset.Fields.each do |field|
@fields << field.Name
end
begin
@data = recordset.GetRows.transpose
rescue
@data = []
end
recordset.Close
end

def execute(sql)
@connection.Execute(sql)
end

def executeGB(sql)
if sql=~ Re_cn
sql = utf8_to_gb(sql)
end
@connection.Execute(sql)
end

def close
@connection.Close
end

def utf8_to_gb(s)
p 'conv to gb18030'
Iconv.conv("GB18030//IGNORE","UTF-8//IGNORE",s)
end
def gb_to_utf8(s)
p 'conv to utf8'
Iconv.conv("UTF-8//IGNORE","GB18030//IGNORE",s)
end

end

#ACCESS
require "win32ole"
class AccessDb
attr_accessor :mdb, :connection, :data, :fields

def initialize(mdb=nil)
    @mdb = mdb
    @connection = nil
    @data = nil
    @fields = nil
end

def open
    connection_string =  'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
    connection_string << @mdb
    @connection = WIN32OLE.new('ADODB.Connection')
    @connection.Open(connection_string)
            p 'access open ok.'
end

def query(sql)
    recordset = WIN32OLE.new('ADODB.Recordset')
    recordset.Open(sql, @connection)
    @fields = []
    recordset.Fields.each do |field|
        @fields << field.Name
    end
    begin
        @data = recordset.GetRows.transpose
    rescue
        @data = []
    end
    recordset.Close
end

def execute(sql)
    @connection.Execute(sql)
end

def close
    @connection.Close
end

end

#其实 SQLite3满好用的。 :D
[/code]