【问题标题】:FirebirdSQL getting list of databases in C#?FirebirdSQL 获取 C# 中的数据库列表?
【发布时间】:2021-02-03 16:02:55
【问题描述】:

我需要从计算机中的 Firebird 服务器获取数据库列表。我想选择并备份我想要的任何数据库。 Microsoft SQL Server 具有该功能,我认为您可以看到数据库连接服务器。 Firebird中有这样的东西吗?或者有解决方法吗?我正在使用 Firebird 2.5,但如果有版本,您可以告诉我。

【问题讨论】:

  • 我不这么认为。要连接到数据库,您可以使用服务器名称和该服务器文件系统中数据库的路径。因此,在实际有人连接到它之前,服务器对潜在的现有数据库一无所知。因此,有可能找出当前正在使用的数据库(有人连接到它),但不能找出服务器可能连接到哪些数据库并为客户端显示。

标签: c# sql firebird firebird2.5


【解决方案1】:

Firebird 没有列出数据库的功能,因为从技术上讲,Firebird 不知道服务器上存在哪些数据库(除了 aliases.conf/databases.conf 中定义的那些,但也没有公开)。

对于 Firebird,数据库完全由数据库文件定义,该数据库文件由完整文件路径或别名(指向文件路径)引用。如果文件存在,Firebird 进程对该文件有足够的访问权限,并且该文件具有服务器可以理解的磁盘结构 (ODS),则您可以连接到它。

这与 SQL Server 不同,SQL Server 服务器保存一个数据库列表,您只能连接到该列表中定义的数据库。

【讨论】:

  • 嘿,我能再问一个问题吗?在 microsoft sql 中有例如名为 temp 的数据库,并且不能有另一个名为 temp 的数据库,但由于 FirebirdSQL 不会将数据库保存在某个地方以进行列表或其他任何事情。 fb中可以有多个同名的数据库吗?
  • @lcarsel - 数据库名称是(本地)文件名。您可以拥有许多不同的文件,其路径和名称完全相同吗??? | aliases.conf (FB1/FB2) 或 databases/conf 文本文件中可以有一个平面列表,但这是可选的辅助功能,因此从技术上讲,您可以为每个数据库有两个连接字符串,一个通过 RAW 文件名,一个通过别名.是的,AFAIR 没有别名标记的空间规则,因此使用精心制作的别名来匹配本地文件名,甚至可以隐藏其他数据库。
  • @lcarsel 不,您不能拥有多个同名数据库,因为数据库连接字符串直接或通过别名或相对路径间接指向文件系统上的特定文件数据库服务器。另一方面,多个不同的连接字符串可能指向单个数据库文件(例如,绝对路径、相对路径、别名,也可能通过符号链接)。
【解决方案2】:

虽然 Firebird 不跟踪 SQL Server 等数据库,但您或许可以通过其他方式完成您想要的工作。您说您要挑选要备份的数据库。您是否有现成的应用程序来执行备份,或者您将开发一个?另一个问题是您的数据库是否有些静态,或者特定服务器上的数据库是否保持不变?

如果数据库列表保持静态,并且您将开发一个 UI 来执行/提交数据库备份,我会执行以下操作。

创建一个数据库,该数据库将包含一个表,其中包含您要备份的数据库的连接字符串。当然,当您添加/删除数据库时,需要修改该表。开发您的 UI 以查看此表以选择要备份的数据库。

我过去做过类似的事情。就我而言,这是穷人模式备份。我有一个包含相关数据库连接字符串的数据库和表,我编写了一个应用程序,该应用程序将遍历该表列表并连接到这些数据库,然后执行元数据提取,然后将元数据提取解析为单个对象,然后提取将单个对象放入另一个数据库中以存储架构。

【讨论】:

  • 其实,我开发这个系统不是为了我自己,而是为了客户使用,所以让客户将所有数据库添加到数据库中并不是我想要的,我只想获取每个数据库在没有客户告诉我任何事情的情况下呈现在客户端,然后从这个数据库客户端列表中选择他/她想要的一个,如果选择的数据库更改位置被删除复制到其他地方等,程序也需要工作。所以我有点卡在 Firebird 上,但是不管怎样,谢谢你的回答,我会研究你给出的想法,非常感谢!!
猜你喜欢
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 2013-06-25
  • 2010-10-10
  • 1970-01-01
相关资源
最近更新 更多