脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Ruby - Ruby连接使用windows下sql server数据库代码实例

Ruby连接使用windows下sql server数据库代码实例

2020-05-01 11:43脚本之家 Ruby

这篇文章主要介绍了Ruby连接使用windows下sql server数据库代码实例,本文直接给出实现代码,而且给出了两种实现和access数据库的实现代码,需要的朋友可以参考下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
require 'win32ole'
 
class SqlServer
  # This class manages database connection and queries
  attr_accessor :connection, :data, :fields
 
  def initialize
    @connection = nil
    @data = nil
  end
 
  def open
    # Open ADO connection to the SQL Server database
    connection_string = "Provider=SQLOLEDB.1;"
    connection_string << "Persist Security Info=False;"
    connection_string << "User ID=USER_ID;"
    connection_string << "password=PASSWORD;"
    connection_string << "Initial Catalog=DATABASE;"
    connection_string << "Data Source=IP_ADDRESS;"
    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

测试代码如下:

?
1
2
3
4
5
6
db = SqlServer.new
db.open
db.query("SELECT PLAYER FROM PLAYERS WHERE TEAM = 'REDS';")
field_names = db.fields
players = db.data
db.close
?
1
2
3
4
5
6
7
8
db = SqlServer.new('localhost', 'sa', 'SOMEPASSWORD')
db.open('Northwind')
db.query("SELECT * from Customers;")
puts field_names = db.fields
cust = db.data
puts cust.size
puts cust[0].inspect
db.close

抄到的别人版本的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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

 

延伸 · 阅读

精彩推荐
  • RubyRuby学习笔记之gem 命令详解

    Ruby学习笔记之gem 命令详解

    gem是一种文件组织的包,一般的ruby的很多插件都有由这种各种的包提供。我们来看看gem的用法 ...

    hebedich8662020-04-16
  • Ruby深入讲解Ruby中Block代码块的用法

    深入讲解Ruby中Block代码块的用法

    这篇文章主要介绍了深入讲解Ruby中Block代码块的用法,block是Ruby学习进阶当中的重要知识,需要的朋友可以参考下 ...

    pringwq4582020-04-27
  • RubyRuby on Rails所构建的应用程序基本目录结构总结

    Ruby on Rails所构建的应用程序基本目录结构总结

    Ruby on Rails是Ruby世界中一家独大的Web开发框架,要掌握Rails程序的构建,对其目录结构的了解十分必要,下面就来看一下Ruby on Rails所构建的应用程序基本目录结...

    kevinhua4002020-05-09
  • RubyWindows下ruby语言安装教程

    Windows下ruby语言安装教程

    这篇文章主要介绍了Windows下ruby语言安装教程,本文使用rubyinstaller提供的安装包安装,并给出图文说明,非常简单,需要的朋友可以参考下 ...

    脚本之家5522020-04-22
  • RubyRuby编程中关于中断和返回的用法教程

    Ruby编程中关于中断和返回的用法教程

    这篇文章主要介绍了Ruby编程中关于中断和返回的用法教程,作者用代码举例讲解了其中需要注意的问题,需要的朋友可以参考下 ...

    李哲3142020-04-27
  • Rubyruby实现修改ubuntu下的hosts

    ruby实现修改ubuntu下的hosts

    本文给大家分享的是通过ruby获取github上的hosts文件内容,修改到本地Ubuntu中,十分的实用,具体你懂得,有需要的小伙伴可以参考下。 ...

    脚本之家3882020-05-03
  • Ruby对Ruby on Rails进行高效的单元测试的教程

    对Ruby on Rails进行高效的单元测试的教程

    这篇文章主要介绍了在Ruby on Rails中进行高效的单元测试的教程,使用到了Ruby的RSpec和Factory Girl框架,需要的朋友可以参考下 ...

    李冠德3562020-04-26
  • RubyRuby中对一元操作符重载实例

    Ruby中对一元操作符重载实例

    这篇文章主要介绍了Ruby中对一元操作符重载实例,实例说明如何对一元操作符进行重载,需要的朋友可以参考下 ...

    junjie1852020-04-14