windows上用ruby连接sqlserver方法

可以通过windows特有的ADO来连接, 需要借助于WIN32OLE, 不是最好的方法, 但是够用.

 

require "win32ole"

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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值