gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:54:31 25 4
gpt4 key购买 nike

您是否曾经需要使用 ActiveRecord 连接到 SQL Server?这可能吗?谁能提供一些起点?

最佳答案

这是我使用的:

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

安装

首先,您需要 Ruby DBI 和 Ruby ODBC。据我所知,DBI 的 ADO DBD 不再受支持。下面的安装并未全面介绍如何安装和/或配置 FreeTDS 等所有必需的移动部件。它还将假定依赖库和适配器本身都已安装 gem。

值得注意的是,这个版本的适配器是使用古老的 0.0.23 版本的 DBI 到当前的稳定版本 0.4.0 开发的。由于 DBI 的更高版本将更改许多内容,因此强烈建议您将安装最大到版本 0.4.0,如下例所示。目前我们不支持高于 0.4.0 的 DBI 版本。好消息是,如果您在 ADO 中使用非常旧的 DBI,从技术上讲,此适配器仍然可以为您工作,但请注意,您的路径正在变旧,并且可能不会长期得到支持。

$ gem install dbi --version 0.4.0
$ gem install dbd-odbc --version 0.2.4
$ 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 以包含以下内容:

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

然后通过注销并再次登录来重新加载您的.profile。

其次,在 Ubuntu 7.10 Server 上我需要安装一些软件包。

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

安装 FreeTDS 后,我可以这样配置它:

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

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

测试 FreeTDS 并不太难:

mlambie@ubuntu:~$ sqsh -S ACUMENSERVER -U username -P password
sqsh: Symbol `_XmStrings' has different size in shared object, consider re-linking
sqsh-2.1 Copyright (C) 1995-2001 Scott C. Gray
This is free software with ABSOLUTELY NO WARRANTY
For more information type '\warranty'
1> use acumen
2> go
1> select top 1 firstname, lastname from tblClients
2> go

[record returned]

(1 row affected)
1> quit

接下来需要配置 ODBC:

mlambie@ubuntu:/etc$ cat odbcinst.ini
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
CPTimeout =
CPReuse =
FileUsage = 1

mlambie@ubuntu:/etc$ cat odbc.ini
[ACUMENSERVER]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = No
Servername = ACUMENSERVER
Database = ACUMEN

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

mlambie@ubuntu:~$ isql -v ACUMENSERVER username password
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> use ACUMEN
[][unixODBC][FreeTDS][SQL Server]Changed database context to 'Acumen'.
[ISQL]INFO: SQLExecute returned SQL_SUCCESS_WITH_INFO
SQLRowCount returns -1
SQL> select top 1 firstname from tblClients;

[record returned]

SQLRowCount returns 1
1 rows fetched
SQL> quit

好的,我们已经有了使用 FreeTDS 的 ODBC 连接到远程 MSSQL 服务器。剩下的就是将 Ruby 添加到其中。

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

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

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

以及更完整的测试(仅使用 SQL SELECT,请注意):

#!/usr/bin/env ruby

require 'dbi'
db = DBI.connect('dbi:ODBC:ACUMENSERVER', 'username', 'password')
select = db.prepare('SELECT TOP 10 firstname FROM tblClients')
select.execute
while rec = select.fetch do
puts rec.to_s
end
db.disconnect
</io:0xb7cbff54>

从这里(修复 odbc lib 位于错误位置): http://ubuntuforums.org/showthread.php?t=433435&page=2

libtdsodbc.so
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 时,任何一种方法都有效

isql -v $dsn $user $passwd

我发现这很有用

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

然后在database.yml文件中:

development:
adapter: sqlserver
mode: odbc
dsn: dsn_name
username: my_username
password: my_password

关于sql-server - 使用 ActiveRecord 连接到 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/721960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com