The following is improved version of the code created by David Mullet, from
http://rubyonwindows.blogspot.com/2007/03/ruby-ado-and-sqlserver.html
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=SQLOLEDB.1;"
connection_string << "Persist Security Info=False;"
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
How to use it:
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
to ruby SQLServer by radegast on Thu Apr 26 00:06:00 -0400 2007
Comments on this post
nryberg posts on Feb 12, 2009 at 15:42
This was really helpful! FYI, if you want to use Windows authentication, assuming that the id running the Ruby script is the one you want to pass on, modify the connection string as follows:
connection_string = "Provider=SQLOLEDB.1;"
connection_string << "Persist Security Info=False;"
connection_string << "Trusted_Connection=yes;"
connection_string << "Initial Catalog=#{database};"
connection_string << "Data Source=#{@host};"
connection_string << "Network Library=dbmssocn"
@connection = WIN32OLE.new('ADODB.Connection')
@connection.Open(connection_string)
Hoornet posts on Dec 12, 2009 at 09:47
Doeasn't work:
F:/gitlocalrepo/QT/LDAP_Sync/sql_server2:40:in `method_missing': Open (WIN32OLERuntimeError)
OLE error code:80004005 in Microsoft OLE DB Provider for SQL Server
[DBNETLIB][ConnectionOpen (Connect()).]Specified SQL server not found.
HRESULT error code:0x80020009
Exception occurred.
from F:/gitlocalrepo/QT/LDAP_Sync/sql_server2:40:in `open'
from F:/gitlocalrepo/QT/LDAP_Sync/sql_server2:79
from -e:1:in `load'
from -e:1
Process finished with exit code 1
You need to create an account or log in to post comments to this site.
分享到:
相关推荐
Ruby-MiniSql是一个针对Ruby开发者的轻量级数据库操作工具,设计目的是为了提供一个简单、快速且安全的方式来执行SQL语句。MiniSql旨在简化数据库交互,使得开发者在处理数据库任务时能够更加高效和便捷。 首先,...
以上两种方式均实现了使用Ruby连接并操作Windows下的SQL Server数据库的功能。第一种方法更加直接,适合初学者快速上手;第二种方法则提供了更多的灵活性和高级特性,适合需要进行复杂数据库操作的应用场景。希望这...
在Ruby on Rails框架中,开发者经常需要连接不同的数据库系统,如MySQL、PostgreSQL或SQL Server。本主题将深入探讨如何在Rails应用中使用SQL Server作为数据存储,特别关注`activerecord-sqlserver-adapter`这个gem...
总的来说,Ruby通过FreeTDS和Tiny_TDS提供了一个方便的途径来连接和操作SQL Server数据库。无论你是进行简单的查询还是复杂的业务逻辑,这些工具都能很好地支持你的开发需求。如果你对数据库操作有更深入的需求,...
在Ruby编程语言中,连接Sybase数据库是一项常见的任务,特别是在处理企业级数据存储时...通过熟悉和利用Ruby与Sybase的连接库,开发者可以更高效地进行数据库管理,执行复杂的数据操作,以及构建数据库驱动的应用程序。
DBI,全称“Database Independent Interface”,是Ruby中一个用于数据库操作的重要库。它提供了一个统一的接口,允许开发者通过简单的API与多种数据库系统进行交互,如MySQL、PostgreSQL、SQLite等,无需关心底层...
标题提到的"ruby-oracle相关的数据库操作的gems包"是指一组用于连接和交互Oracle数据库的Ruby库。描述中指出,这些包主要基于oci8技术,oci8是Oracle公司提供的一个C接口,允许其他编程语言,如Ruby,与Oracle数据库...
总结来说,连接Ruby和Drizzle数据库涉及到使用`DBI`库,配置ODBC连接,编写SQL查询,以及可能的事务和错误处理。通过这样的连接,开发者能够有效地在Ruby应用程序中存取和管理Drizzle数据库的数据。同时,对源码的...
TinyTDS的设计目标是提供一个轻量级、高效且易于使用的接口,使得在Ruby中操作SQL Server数据库变得简单。它使用了DB-Library,这是FreeTDS提供的一个API,专门用于与SQL Server通信。DB-Library提供了直接的数据库...
`ruby-plsql-master` 这个压缩包文件很可能是一个开源项目,它可能提供了Ruby与PL/SQL之间的交互能力,使得开发者可以用Ruby语言来操作Oracle数据库中的PL/SQL存储过程和函数。 1. **Ruby的介绍**: - Ruby的设计...
下面我们将详细介绍如何配置Rails应用来连接并操作SQLServer 2000。 首先,我们需要安装一个支持SQLServer的Ruby数据库适配器。在这个场景下,`ruby-dbi`和`dbd-sqlserver`这两个库可以帮助我们实现这个功能。`ruby...
总的来说,Ruby的初始使用过程涵盖了环境配置、目录切换、数据库连接、数据库操作等多个方面。理解并熟练掌握这些步骤,你就能顺利开始你的Ruby编程之旅。记住,实践是学习的最佳途径,动手尝试才是王道。在实践中,...
标题 "Ruby 用ADO读取ACCESS数据" 描述了如何使用Ruby编程语言通过ActiveX Data Objects (ADO)接口来访问并操作Microsoft Access数据库文件。在本文中,我们将深入探讨这个主题,了解如何设置环境,安装必要的库,...
它允许开发者编写Ruby代码来执行SQL查询、管理数据库对象以及处理数据库连接。`ruby-mysql-0.2.6.tar.gz`是一个压缩包,包含了版本为0.2.6的Ruby MySQL驱动程序的源代码。 在Ruby中,数据库连接通常通过数据库...
2. **简单易用的API**:它提供了一个简洁的Ruby接口,使得执行SQL查询、处理结果集以及管理连接变得更加直观。例如,你可以直接使用`client.query`方法执行SQL语句,并获取一个结果集对象。 3. **全面的错误处理**...
在不同的操作系统上,安装Ruby的方式有所不同。在Windows上,可以使用RubyInstaller;在macOS或Linux上,可以通过包管理器如Homebrew或apt-get来安装。安装完成后,通过`ruby -v`命令检查Ruby版本,确保安装成功。 ...
接下来,你可以创建数据库连接并执行 SQL 查询: ```ruby db = SQLite3::Database.new "test.db" db.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)") ``` 这里我们创建了一个名为 `users` 的...
一旦安装了`sqlite3`库,你就可以在Ruby程序中创建、连接、查询和操作SQLite数据库。以下是一些基本的示例: 1. **创建数据库连接**: ```ruby require 'sqlite3' db = SQLite3::Database.new "test.db" # 创建名...
2. ActiveRecord:这是 Rails 的 ORM(对象关系映射)组件,允许开发者使用 Ruby 代码操作数据库,而不直接编写 SQL。 3. Scaffold:快速开发工具,自动生成 CRUD(创建、读取、更新、删除)操作的基础控制器和视图...