sql-server – 使用ActiveRecord连接到SQL Server

前端之家收集整理的这篇文章主要介绍了sql-server – 使用ActiveRecord连接到SQL Server前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
你有没有使用ActiveRecord连接到sql Server?这可能吗?任何人都可以提供一些起点?

解决方法

这是我用的

从这里:
http://github.com/rails-sqlserver/2000-2005-adapter/tree/master

安装

首先,您将需要Ruby DBI和Ruby ODBC.据我所知,不再支持ADO DBD for DBI.下面的安装不是一个全面的步骤,通过如何获取所有必需的移动部件,如FreeTDS安装和/或配置.它还将假设从属库和适配器本身的gem安装.

应该注意的是,该版本的适配器是使用古老的0.0.23版本的DBI开发的,直到目前的稳定版本为0.4.0.因为后期版本的DBI将会改变很多事情,所以很高兴地建议您将安装的最大值设置为0.4.0,这些示例如下所示.目前我们不支持高于0.4.0的DBI版本.好消息是,如果您使用非常旧的DBI与ADO,技术上这个适配器仍然可以为您工作,但要警告您的路径越来越老,可能不支持长时间.

  1. $gem install dbi --version 0.4.0
  2. $gem install dbd-odbc --version 0.2.4
  3. $gem install rails-sqlserver-2000-2005-adapter -s http://gems.github.com

从这里:http://lambie.org/2008/02/28/connecting-to-an-mssql-database-from-ruby-on-ubuntu/

首先,更新你的〜/ .profile以包括以下内容

  1. export ODBCINI=/etc/odbc.ini
  2. export ODBCSYSINI=/etc
  3. export FREETDSCONF=/etc/freetds/freetds.conf

然后重新加载你的.profile,注销并重新输入.

其次,在Ubuntu 7.10服务器上,我需要安装一些软件包.

  1. mlambie@ubuntu:~$sudo aptitude install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc

安装FreeTDS我可以这样配置:

  1. mlambie@ubuntu:/etc/freetds$cat freetds.conf
  2. [ACUMENSERVER]
  3. host = 192.168.0.10
  4. port = 1433
  5. tds version = 7.0

这里重要的是ACUMENSERVER,它是连接到数据库时使用的DSN.主机和端口是不言自明的,值得注意的是,我不得不使用7.0作为tds版本.

测试FreeTDS不是太难:

  1. mlambie@ubuntu:~$sqsh -S ACUMENSERVER -U username -P password
  2. sqsh: Symbol `_XmStrings' has different size in shared object,consider re-linking
  3. sqsh-2.1 Copyright (C) 1995-2001 Scott C. Gray
  4. This is free software with ABSOLUTELY NO WARRANTY
  5. For more information type '\warranty'
  6. 1> use acumen
  7. 2> go
  8. 1> select top 1 firstname,lastname from tblClients
  9. 2> go
  10.  
  11. [record returned]
  12.  
  13. (1 row affected)
  14. 1> quit

接下来需要配置ODBC:

  1. mlambie@ubuntu:/etc$cat odbcinst.ini
  2. [FreeTDS]
  3. Description = TDS driver (Sybase/MS sql)
  4. Driver = /usr/lib/odbc/libtdsodbc.so
  5. Setup = /usr/lib/odbc/libtdsS.so
  6. CPTimeout =
  7. CPReuse =
  8. FileUsage = 1
  9.  
  10. mlambie@ubuntu:/etc$cat odbc.ini
  11. [ACUMENSERVER]
  12. Driver = FreeTDS
  13. Description = ODBC connection via FreeTDS
  14. Trace = No
  15. Servername = ACUMENSERVER
  16. Database = ACUMEN

然后我测试了与isql的连接:

  1. mlambie@ubuntu:~$isql -v ACUMENSERVER username password
  2. +---------------------------------------+
  3. | Connected! |
  4. | |
  5. | sql-statement |
  6. | help [tablename] |
  7. | quit |
  8. | |
  9. +---------------------------------------+
  10. sql> use ACUMEN
  11. [][unixODBC][FreeTDS][sql Server]Changed database context to 'Acumen'.
  12. [Isql]INFO: sqlExecute returned sql_SUCCESS_WITH_INFO
  13. sqlRowCount returns -1
  14. sql> select top 1 firstname from tblClients;
  15.  
  16. [record returned]
  17.  
  18. sqlRowCount returns 1
  19. 1 rows fetched
  20. sql> quit

好的,所以我们有ODBC使用FreeTDS连接到一个远程的MSsql服务器.剩下的就是将Ruby添加到组合中.

  1. mlambie@ubuntu:~$sudo aptitude install libdbd-odbc-ruby

最后要测试的是Ruby可以使用DBI和ODBC命中实际的数据库,这很容易测试:

  1. mlambie@ubuntu:~$irb
  2. irb(main):001:0> require "dbi"
  3. => true
  4. irb(main):002:0> dbh = DBI.connect('dbi:ODBC:ACUMENSERVER','username','password')
  5. => #<DBI::DatabaseHandle:0xb7ac57f8 @handle=#<DBI::DBD::ODBC::Database:0xb7ac5744
  6. @handle=#<odbc::database:0xb7ac576c>,@attr={}>,@trace_output=#</odbc::database:0xb7ac576c><io:0xb7cbff54>,@trace_mode=2>
  7. irb(main):003:0> quit

还有一个更完整的测试(只有使用sql SELECT,记住你):

  1. #!/usr/bin/env ruby
  2.  
  3. require 'dbi'
  4. db = DBI.connect('dbi:ODBC:ACUMENSERVER','password')
  5. select = db.prepare('SELECT TOP 10 firstname FROM tblClients')
  6. select.execute
  7. while rec = select.fetch do
  8. puts rec.to_s
  9. end
  10. db.disconnect
  11. </io:0xb7cbff54>

从这里(修复odbc lib在错误的地方):
http://ubuntuforums.org/showthread.php?t=433435&page=2

  1. libtdsodbc.so
  2. with freeTDS (freetds-dev,tdsodbc),you can either edit the path in the odbcinst.ini file for the [FreeTDS] driver section OR cp the /usr/lib/odbc/libtdsodbc.so into /usr/lib/libtdsodbc.so.

提示访问mssql时,任何一种方式都有效

  1. isql -v $dsn $user $passwd

我发现这是有用的

http://www.unixodbc.org/doc/FreeTDS.html#Configuration

然后在database.yml文件中:

  1. development:
  2. adapter: sqlserver
  3. mode: odbc
  4. dsn: dsn_name
  5. username: my_username
  6. password: my_password

猜你在找的MsSQL相关文章