连接失败,数据库有'。'在名字中

时间:2014-11-12 14:53:37

标签: ruby-on-rails ruby sql-server activerecord

我一直试图在我们的某个rails应用中调试SQL Server数据库错误。问题是数据库名称(在database.yaml中添加)中包含'.''testdb.v1')。它导致错误:

TinyTds::Error: Database 'testdb' does not exist. Make sure that the name is entered correctly.

认为这是一个YAML与Rails问题引用了'。'我在rails控制台中打开了应用程序并尝试了我能想到的各种Ruby引用,但每次都会得到相同的错误。

在我的model.connection_config中分配数据库名称的某个地方,'。'被解释为格式说明符,并从名称中删除后缀。 model.connection_config['database']已尽可能'testdb.v1',但显然不是将其传递给SQL Server。

我不确定这是一个rails问题还是一个SQL Server问题,虽然我一起扔的C#应用​​程序设法打开数据库没有问题。因此,我认为它是rails / ActiveRecord问题。不幸的是,我没有选择更改数据库名称。

有没有办法引用'。'性格,以便它将保持'。和数据库名称中的后缀?

1 个答案:

答案 0 :(得分:2)

进一步调查将我带到了activerecord-sqlserver-adapter

的github页面

在那里,我发现问题230226,与我的问题类似。显然使用'。'在数据库,表或列名称中会出现类似的问题。由于这些是在2012年创建的并且仍处于打开状态,因此看起来不会很快出现修复。在评论中有一些想法可以将其修补到工作状态。猜猜这是我必须采取的方法来实现这一目标。

更新:对于遇到类似问题的人来说,数据库名称是唯一的问题(不是表或列),我们使用的解决方案是围绕sqlserver-adapter的最终运行。我们为每个数据库创建了一个SQL用户,并为该用户分配了一个默认数据库。然后,我们使用用户登录进行连接,但将数据库名称保留为null。在这种情况下,SQL Server将连接到默认数据库。