Ruby and ActiveX Data Objects (ADO) make working with Microsoft SQL Server databases simple. Here's a simple example of a class that manages the SQL Server database connection and queries:
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
You can then use this class as follows:
db = SqlServer.new
db.open
db.query("SELECT PLAYER FROM PLAYERS WHERE TEAM = 'REDS';")
field_names = db.fields
players = db.data
db.close
The above code is, of course, incomplete and can certainly be improved and extended (error handling, etc.). But, hopefully, it provides you with a solid foundation on which to build.
UPDATE: You might like to know that you can automate many of your SQL Server administrative tasks by leveraging Distributed Management Objects (SQL-DMO). I've explained this in a later article here.
Thanks for stopping by!
Sunday, March 25, 2007
Ruby, ADO, and SQLServer
Subscribe to:
Post Comments (Atom)
7 comments:
You might like to see how you can use Ruby In Steel to integrate SQL Server, Ruby and Rails inside Visual Studio. See my article on the subject, here: http://www.sapphiresteel.com/Using-SQL-Server-With-A-Rails
best wishes
Huw
Hi David
thanks for the hint!. Worked like charm.
I have made some minor improvements to make the class easier to use and to configure by parameters.
The modified version with changes is available at http://snippets.dzone.com/posts/show/3906
Regards
Miro
http://thinkwrap.wordpress.com/
Thanks, Miro!
David
You rock. This helped muchly, since the Ruby DBI interface had not been playing nicely.
Thank you. Your posts have helped me a lot. Thanks.
Thanks a lot!
What about active-record and sql-server,can you give an example for this outside RAILS, please
Post a Comment