当前位置: 首页 > news >正文

Ruby connect to SQL server native client

尝试了一天,终于找到可以连接SQL Server的方法了。

第一种方法,使用win32ole连接。

特别注意红色部分哦,网络上面很多人报出来的错误都是因为连接的字符串的Provider有问题,修改为红色的值,就可以和SQL server的native client连接成功了。

require 'win32ole'

class SqlServer
    # This class manages database connection and queries
    attr_accessor :connection, :data, :fields
    attr_writer :username, :password

    def initialize(host, username = 'sa', password='')
        @connection = nil
        @data = nil
        @host = host
        @username = username
        @password = password
    end

    def open(database)
        # Open ADO connection to the SQL Server database
        connection_string = "Provider=SQLNCLI;"
        connection_string << "Persist Security Info=True;"
        connection_string << "User ID=#{@username};"
        connection_string << "password=#{@password};"
        connection_string << "Initial Catalog=#{database};"
        connection_string << "Data Source=#{@host};"
        connection_string << "Network Library=dbmssocn"
        @connection = WIN32OLE.new('ADODB.Connection')
        @connection.Open(connection_string)
    end

    def query(sql)
        # Create an instance of an ADO Recordset
        recordset = WIN32OLE.new('ADODB.Recordset')
        # Open the recordset, using an SQL statement and the
        # existing ADO connection
        recordset.Open(sql, @connection)
        # Create and populate an array of field names
        @fields = []
        recordset.Fields.each do |field|
            @fields << field.Name
        end
        begin
            # Move to the first record/row, if any exist
            recordset.MoveFirst
            # Grab all records
            @data = recordset.GetRows
        rescue
            @data = []
        end
        recordset.Close
        # An ADO Recordset's GetRows method returns an array
        # of columns, so we'll use the transpose method to
        # convert it to an array of rows
        @data = @data.transpose
    end

    def close
        @connection.Close
    end
  end

db = SqlServer.new('hostip', 'username', 'password')
db.open('databasename')
warmlead_url = "select * from table'"
db.query(warmlead_url)

puts field_names = db.fields

cust = db.data

puts cust.size

puts cust[0].inspect

db.close

 

第二种方法,使用dbi连接。

按照如下步骤先配置Ruby环境,然后再运行脚本。

1. 先去下载ruby-dbi下面的dbi-0.4.3.gem和dbi-0.1.0.tar.gz,下载网址为http://rubyforge.org/frs/?group_id=234&release_id=4323

2. 安装dbi-0.4.3.gem

   gem install dbi-0.4.3.gem

3. 解压dbi-0.1.0.tar.gz,寻找ADO.rb文件。dbi-0.1.0.tar.gz包解压后的路径下面寻找(bdi-0.1.0/lib/dbd/ADO.rb

4. 手动创建ADO文件夹,创建好之后的路径为c:/ruby/lib/ruby/site_ruby/1.8/DBD/ADO

5. 拷贝ADO.rb文件到步骤4中创建好的文件夹下面

6. 使用下面的Ruby代码连接SQL Server Native Client, 特别注意红色的部分。

require 'dbi'

class Server
attr_reader :name
def initialize(name, username, password, database)
  @server_name=name
  @username = username
  @password = password
  @database = database
  @dbh=DBI.connect("DBI:ADO:Provider=SQLNCLI;Data Source=#{name};Persist Security Info=False;User ID=#{@username};password=#{@password};Initial Catalog=#{database};")
end
def databases
  db=Array.new
  @dbh.select_all('SELECT name FROM master.sys.databases ORDER BY 1') do | row |
   db.<< Database.new(@dbh,row[0])
  end 
  db
end
end

class Database
attr_reader :name
def initialize(dbh,name)
  @dbh=dbh
  @name=name
end
end

server=Server.new("hostname","username","password","database_name")
server.databases.each {|x| puts x.name}

转载于:https://www.cnblogs.com/nikeylee/archive/2010/06/11/1756585.html

相关文章:

  • Nmap使用方法
  • 系统蓝屏重起:如何修改设置,记录系统蓝屏重起的错误
  • Asp.Net应用程序配置Web.config
  • ubuntu9.10下构建tftp服务
  • WPF入门笔记
  • BusyBox 简化嵌入式 Linux 系统
  • 常用加密算法介绍--DES3
  • JDK1.6官方下载_JDK6官方下载_JDK1.6API(chm)下载_JDK6APICHM中文
  • 性能优化总结(五):CSLA服务端如何使用多线程的解决方案(转)
  • win7下使用matlab7.1,解决java错误提示。
  • 按时间自动关闭的弹出对话框
  • 在MTK上实现数独小游戏
  • 把javascript,vbscript中得数组传递给COM组件(or Activex)
  • 在C#中完成海量数据的批量插入和更新
  • js split()与John截取函数(复制)
  • 【面试系列】之二:关于js原型
  • 345-反转字符串中的元音字母
  • CSS 三角实现
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • EOS是什么
  • go语言学习初探(一)
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • tweak 支持第三方库
  • windows下如何用phpstorm同步测试服务器
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 构建工具 - 收藏集 - 掘金
  • 解析 Webpack中import、require、按需加载的执行过程
  • 前端js -- this指向总结。
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 说说动画卡顿的解决方案
  • 用简单代码看卷积组块发展
  • 运行时添加log4j2的appender
  • 中文输入法与React文本输入框的问题与解决方案
  • ​低代码平台的核心价值与优势
  • #pragam once 和 #ifndef 预编译头
  • #Z2294. 打印树的直径
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (arch)linux 转换文件编码格式
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (强烈推荐)移动端音视频从零到上手(下)
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • ***测试-HTTP方法
  • ***监测系统的构建(chkrootkit )
  • .java 9 找不到符号_java找不到符号
  • .Net - 类的介绍
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET CLR Hosting 简介
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .Net组件程序设计之线程、并发管理(一)
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • /dev下添加设备节点的方法步骤(通过device_create)