服务器之家

服务器之家 > 正文

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

时间:2020-05-01 11:43     来源/作者:脚本之家
?
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

 

相关文章

热门资讯

沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
和平精英超高音质怎么修改 和平精英超高音质重启设置方法
和平精英超高音质怎么修改 和平精英超高音质重启设置方法 2019-06-26
返回顶部