Ruby 重复查询的最后一行
我正在使用ruby dbi访问MS SQL数据库。问题是,每当我从DB中选择多行时,结果包含正确数量的项,但所有项都是相同的,而它们不应该是: irbmain:001:0>要求“dbi” =>正确 irbmain:010:0>db=DBI.connect'DBI:ODBC:dataSource','userName','***' => irbmain:009:0>db.选择所有“从原始数据中选择不同的前10个id” => [[308], [308], [308], [308], [308], [308], [308], [308], [308], [308]] 问题似乎与问题相同,但使用alias提出的解决方案对我不起作用,或者我可能误解了它 我怎样才能解决这个问题Ruby 重复查询的最后一行,ruby,dbi,Ruby,Dbi,我正在使用ruby dbi访问MS SQL数据库。问题是,每当我从DB中选择多行时,结果包含正确数量的项,但所有项都是相同的,而它们不应该是: irbmain:001:0>要求“dbi” =>正确 irbmain:010:0>db=DBI.connect'DBI:ODBC:dataSource','userName','***' => irbmain:009:0>db.选择所有“从原始数据中选择不同的前10个id” => [[308], [308], [308], [308], [308],
我在Windows上使用DBI0.4.5和Ruby1.9.2。这看起来有点奇怪,因为select_all应该返回DBI::Row对象。试一试
rows = db.select_all('select distinct top 10 id from rawdata')
rows.each do |row|
printf "ID: %d\n", row["id"]
end
这看起来有点奇怪,因为select_all应该返回DBI::Row对象。试一试
rows = db.select_all('select distinct top 10 id from rawdata')
rows.each do |row|
printf "ID: %d\n", row["id"]
end
我只能推荐:选择TinyTds 其 -易于安装和配置 -更快
-更稳定我只能推荐:选择TinyTds 其 -易于安装和配置 -更快
-更稳定最后,在至少部分了解我在问题中所链接的帖子之后,我修改了DBI源代码中的row.rb文件: 我删除了密码
if RUBY_VERSION =~ /^1\.9/
def __getobj__
@arr
end
def __setobj__(obj)
@delegate_dc_obj = @arr = obj
end
else
我也删除了继承:
if RUBY_VERSION =~ /^1\.9/
def __getobj__
@arr
end
def __setobj__(obj)
@delegate_dc_obj = @arr = obj
end
else
我还删除了继承:
def myDBIexecute(dbhash,query)
begin
# open the connection
conn = DBI.connect('DBI:ODBC:'+dbhash['datasource'].to_s,dbhash['username'].to_s,dbhash['password'].to_s)
sth = conn.prepare(query)
sth.execute()
outputme=[]
while row = sth.fetch
mrow={}
sth.column_names.each{|aname|
mrow[aname]=row[aname].to_s
}
outputme << mrow
end
sth.finish
return outputme
rescue DBI::DatabaseError => e
puts "Error code: #{e.err}"
puts "Error message: #{e.errstr}"
ensure
# disconnect from server
conn.disconnect if conn
end
end
我在使用ruby 1.9.2p180 2011-02-18的MS-SQL数据库上也遇到了同样的问题 我就是这样解决的:
def myDBIexecute(dbhash,query)
begin
# open the connection
conn = DBI.connect('DBI:ODBC:'+dbhash['datasource'].to_s,dbhash['username'].to_s,dbhash['password'].to_s)
sth = conn.prepare(query)
sth.execute()
outputme=[]
while row = sth.fetch
mrow={}
sth.column_names.each{|aname|
mrow[aname]=row[aname].to_s
}
outputme << mrow
end
sth.finish
return outputme
rescue DBI::DatabaseError => e
puts "Error code: #{e.err}"
puts "Error message: #{e.errstr}"
ensure
# disconnect from server
conn.disconnect if conn
end
end
它打印了身份证号码308的十倍。还有行[0]。类返回DBI::Row,所以我认为它们就是这样。奇怪。我假设不是在SQL Management Studio中执行相同的查询时?不,在最后一行返回308,但其他行则不同。我最好的选择是在Ruby 1.8.7下尝试它,它打印出ID:308的十倍。还有行[0]。类返回DBI::Row,所以我认为它们就是这样。奇怪。我假设不是在SQL Management Studio中执行同一查询时?不,在最后一行返回308,但其他行则不同。我的最佳选择是在Ruby 1.8.7下尝试。您运行的是什么版本的Ruby odbc?我使用的是ruby-odbc-0.2.5,这是rubygems的最新版本。我的意思是,我使用的是dbd-odbc-0.25和ruby-odbc-0.99994。您运行的是什么版本的ruby odbc?我使用的是ruby-odbc-0.2.5,这是rubygems的最新版本。我的意思是,我使用的是dbd-odbc-0.25和ruby-odbc-0.99994。是的,TinyTDS更简单。只需安装ActiveRecord适配器并使用它,这也是我们的wiki页面。您也可以使用原始TinyTDS进行连接。无论您想要达到什么样的低或高级别,但DBI和ODBC都很慢!!!是的,TinyTDS更容易。只需安装ActiveRecord适配器并使用它,这也是我们的wiki页面。您也可以使用原始TinyTDS进行连接。无论您想要达到什么样的低或高级别,但DBI和ODBC都很慢!!!