设为首页 收藏本站
查看: 444|回复: 0

[经验分享] windows下sql server连接

[复制链接]
发表于 2016-10-30 01:53:13 | 显示全部楼层 |阅读模式
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


测试代码如下:

db = SqlServer.new
db.open
db.query("SELECT PLAYER FROM PLAYERS WHERE TEAM = 'REDS';")
field_names = db.fields
players = db.data
db.close

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

抄到的别人版本的:

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-292941-1-1.html 上篇帖子: SQL Server系统视图 下篇帖子: SQL Server 2005 筆記
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表