8

我的客户是一家牙科诊所,购买了一套诊所管理软件。该软件安装在他们的本地服务器上,包括患者数据库、时间表和各种医疗记录。现在他们希望我为他们编写一些他们的包中没有提供的实用程序,为此我需要能够查询这个数据库。

我尝试致电软件制造商 ( Patterson/EagleSoft ) 的技术支持,但很难找到足够了解该技术的人来回答我的问题。据我所知,他们的软件没有 API,可以理解的是,他们不愿意告诉我如何以编程方式直接查询数据库。他们确实有一个交互式查询窗口,但显然这对编写自动查询没有好处。他们只会说某处有一个 SQL Server DB,但连接到它的 ODBC 驱动程序是 SQL Anywhere 驱动程序(嗯?)。

所以我在服务器上四处搜索,找不到任何数据库文件。然后我发现安装创建了某种专有虚拟机,它只对 EagleSoft 软件可见。但是,虽然他们非常擅长在混淆层中隔离他们的数据库,但他们仍然打开了一个 ODBC 驱动程序,这确实是一个 SQL Anywhere 连接。

现在,在引人入胜且冗长的序言之后,这是我的问题:我可以在这个 ODBC 连接上运行哪些查询来询问数据库的结构?如果它是下面的 SQL Server DB,我可以使用 sysobjects 表,但我不完全掌握如何使用 SQL Anywhere ODBC 连接来连接到 MSSQL DB。如果他们误导了我并且它确实是下面的 SQL Anywhere 数据库,那么要运行哪些查询来获取数据库结构?

如果还有其他人曾经成功地查询过 EagleSoft(或任何类似的专有软件包)——请告诉我你是怎么做到的!

4

4 回答 4

8

事实证明,最简单的方法是使用 编写一个小应用程序OdbcDbConnection,并使用随软件安装的 DSN 进行连接。经过一番探索'select * from sysobjects',发现它确实是一个 MS-SQL 数据库,我很高兴从那里开始!

于 2010-12-14T18:27:46.573 回答
1

我会使用像 squirel 这样的工具,它非常适合浏览任何数据库,以检查是否有人成功使用“SQL Anywhere”这个谷歌结果:

http://blog.gmane.org/gmane.comp.db.squirrel-sql.users/month=20091001

表明其他人已经设法让松鼠做到这一点。它很容易使用...当然假设您设法使连接正常工作!

于 2010-12-12T09:39:29.673 回答
1

一些可能有帮助的工具是SQLWorkbenchDjango。我使用 SQLWorkbench 将数据从生产系统复制到 Postgres 数据库中,这样我就可以在不破坏生产环境的情况下对其进行破解。然后我使用Django的inspectdb来生成数据库环境的模型。从那里很容易在数据库和模板中创建“视图”以准确显示我想要的内容。

更新:从 Eaglesoft 19 开始,Patterson 似乎对数据库进行了密码保护,并且他们已经竭尽全力防止用户在不支付访问费用的情况下获取数据。

更新:就像我之前提到的,Eaglesoft 19 有一个锁定版本的数据库。对于只读访问,您可以致电 Patterson 并询问他们安装在您的服务器上的“技术参考”工具的“数据库管理员”部分的密码。进入后,可以选择设置只读密码以访问数据库。用户名是“dba”和您设置的任何密码。有时需要与他们进行一些反复才能让您访问,但我的解决方案是说“我们已经将患者数据放入 Eaglesoft 十多年了,而且我们一直都可以访问数据库。现在你限制它并告诉我们我们必须支付访问。听起来您想通过劫持我们的数据来勒索钱财。我可能应该由我们的法律团队来管理它。”

于 2016-08-03T01:07:14.937 回答
0

我编写了自己的 PHP 驱动网站来访问和操作 eaglesoft 数据库中的数据。您只需创建与本地 DNS 条目的 odbc 连接即可。要查看数据库结构,您可以使用 eaglesoft 或高级查询工具中包含的技术参考。

于 2013-02-11T03:01:38.447 回答