问题描述
所以,我在这里遇到了麻烦,已经尝试了 8 个小时,但已经变得很奇怪
一些背景:
我正在为一位朋友调查一个问题,我需要从由某些 Firebird 实现支持的 LibreOffice Base 自制软件数据库中转换一些数据(我是 100% 新手,所以我不确定如何这被称为/有效)我需要将此数据转换为 xml,该 xml 必须向某些第三方公司提供的某些 xsd 确认。
我已经从 xsds 生成了代码(50K 行代码......)并且应该能够在 C# 中映射数据,输出一个 xml,它们很好。
但是,我在访问数据库文件中的数据时遇到了问题......我已经用谷歌搜索了不知道多久,但我似乎无法在 .net 中找到如何做到这一点。
我可以解压 .odb 文件并检查内容。只有一些 xml 定义了一些查询、表和表单。和 1 个 .fbk 文件。我实际上不确定数据与 fbk 文件的区别,但谷歌搜索只告诉我这显然是用于恢复的备份文件,我猜测它保存了实际数据,但是那么?
文件中没有很多数据,应该很容易加载到内存中,所以我不希望那里有任何问题。 (他们还为每个项目使用一个新的 db,所以每次需要 xml 转换时都会有几 MB 的顶部)
有谁知道这是否可能?我如何实现这一目标?
解决方法
您是否尝试连接到数据库以使用 C# 运行查询?这可以通过 LibreOffice SDK 完成。 SDK 发行版中包含 Calc 的 C# 示例:https://api.libreoffice.org/examples/examples.html#CLI_examples。
一旦您能够让 C# 和 LO 协同工作,请在线查找 Base 示例并将它们改编为 C#,例如:
- 用 Basic 编写的基本查询:https://stackoverflow.com/a/37335045/5100564)
- 在 Java 中使用 Base:Create a libreoffice text-based datasource and set settings with java
那里有很多类似的信息,虽然它没有组织得很好,所以希望花一些时间搜索。如果您愿意使用其他语言,Java 在使用 LO SDK 方面比 C# 好得多。
这是另一个完全未经测试的想法。您提到了在解压缩 .odb Base 文件时找到的 .fbk 文件。那是一个 Firebird 备份文件。所以,这似乎应该有效:
- 安装正确版本的 Firebird。要验证嵌入式引擎版本,请在 LO Base 中转到 Tools -> SQL 并从 Ways to Determine the Version of Firebird SQL? 运行查询 这将在 LO 7.1 中生成
3.0.0
,与 {{ 版本相同3}}。 - 运行 LO 5.3 以恢复 .fbk 文件。
- 使用 ODBC 等连接从 C# 连接到 Firebird。