sql-server - 从跨平台应用程序连接到 MS SQL Server

标签 sql-server c windows macos odbc

我正在开发一个 GUI 应用程序,该应用程序将用于对人工智能算法生成的大型数据集执行“手动评估”。评估的性质对于这个问题并不重要;重要的是评估的性质。唯一的事实是,该程序需要从服务器定期检查新数据下载它,然后上传结果。产生。就这个问题而言,每个数据集只是一个二进制 blob。

用于托管数据的计算机当前已设置Microsoft SQL Server。出于管理原因,我可能必须使用 SQL Server(而不是在同一台计算机上运行的 Web 服务器)来存储数据。我了解 SQL,并且我怀疑学习 Microsoft 版本的 SQL 会遇到困难。


这里是困难的部分:程序需要在Mac OS XWindows上运行。我在 Windows 开发方面没有太多经验,并且使用 XCode 在 Mac 上完成大部分编码 — 使用交叉编译器和 Windows VM 来编译/测试 Windows 版本。 (但是,我已经在 Windows 上运行了 GUI,所以这不是这里的问题。代码是用 Objective-C 编写的,但我很乐意使用纯 C,甚至 C++ 来访问数据库.)

程序只需要连接到SQL Server并执行简单的查询。我真的很想要一个可以链接到我的应用程序的库,这样它就可以完成它的任务 - 有点像 SQLite ,但我显然会传递连接字符串而不是数据库文件名。我希望最终用户不必在他们的计算机上安装任何额外的东西。这是我迄今为止发现的内容:

  • Microsoft Data Access Components ' ODBC接口(interface)——仅限Windows,最新版本于2005年发布,这让我想知道它是否支持最新版本的SQL Server。
  • iODBC — 几乎可以在除 Windows 之外的所有平台上运行。
  • FreeTDS — 通过 native 协议(protocol)而不是通过 ODBC 访问 SQL Server。声称可以在“Linux/UNIX”上运行,但我能够在 OSX 上编译它,没有任何问题。

最后两个是开源的。快速查看代码表明 FreeTDS 使用 BSD 套接字连接到服务器(我还没有弄清楚 IODBC 使用什么,但可能是相同的),并且我不明白为什么代码的任何其他部分会是非可移植。如果有必要,我会准备尝试将 FreeTDS 套接字代码移植到 Winsock,如果我可以相当确定我不会遇到任何进一步的障碍。


我的问题是:

我可以获取其中一个库(或其他任何库)来链接到我的应用程序的 Mac 和 Windows 版本吗?

如果没有,为了确保最小化麻烦,最好的库组合是什么?无论哪种情况,在分发 Windows 版本时是否有我需要了解的问题,例如需要在用户计算机上安装的 DLL?


更新:

根据 @TomTom 的推荐,我将尝试 FreeTDS。不管我最初的想法如何,它确实可以在 Windows 上编译,并且似乎使用 TDS 的 native 实现被认为比 ODBC 更好,而 ODBC 显然已经过时了 10 年。

最佳答案

iOBDC 是一个 ODBC 驱动程序管理器,而不是实际的 ODBC 驱动程序,因此如果您要使用它,MS SQL Server 也需要 ODBC 驱动程序。如果您在 Mac OS X 上进行开发并且有一个适用于 Windows 的交叉编译器,那么您可以创建一个 ODBC 应用程序来执行您在 Mac OS X 上所需的这些数据库操作,然后针对 Windows 进行交叉编译。构建 ODBC 应用程序的美妙之处在于,您只需要目标数据库和操作系统的源代码和 ODBC 驱动程序,这样您就不需要进行任何调查。例如,OpenLink Software 拥有一套适用于最流行的关系数据库(包括 SQL Server)的 ODBC 驱动程序,详细信息请参见 http://uda.openlinksw.com/sqlserver-odbc/

关于 OLEDB,它可能是比 ODBC 更新的技术,但由于它是 Windows 特定的,因此未能通过时间的考验,并且已被 ADO.Net 另一种 Windows 特定技术取代(除非您有 Mono)。而 ODBC 是一种主要的通用数据访问 API,可在大多数商业操作系统 Windows、Linux/Unix、Mac OS X 等上使用,并且继续受到 OpenLink Software 等其他第三方供应商的支持和维护,他们将确保它保持强大和可靠的功能。可行的跨平台和独立于数据库的 API。

关于sql-server - 从跨平台应用程序连接到 MS SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3490348/

相关文章:

java - ubuntu环境下Java连接MS SQL数据库

c - C 中的嵌套结构和取消引用指针

c++ - 将 C++ 实例方法分配给全局函数指针?

c - 使用 fork() 的奇怪行为;

windows - Windows Dockerfile 中的请求下载失败,错误为 'is not recognized'

在数据条目的 2 个不同位置使用的表中同一列的 SQL 语法

不支持 SQL Server 版本 10 错误

c++ - 如果手动关闭程序,是否会调用析构函数?

c++ - Qt 模型/ View 委托(delegate) : How to simply translate text data?

sql - 当前组的历史总和