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

时间:2010-08-16 03:13:43

标签: sql-server c windows macos odbc

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

将托管数据的计算机当前设置为 Microsoft SQL Server 。出于管理原因,我可能不得不使用SQL Server(而不是在同一台机器上运行的Web服务器)来存储数据。我知道SQL,我怀疑我在学习微软的版本时会遇到麻烦。


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

该程序只需连接到SQL Server并执行简单查询。我真的很喜欢一个我可以链接到我的应用程序的库,以便它可以做它的事情 - 我可以使用SQLite,但我显然是传递连接字符串而不是数据库文件名。我更希望最终用户不必在他们的机器上安装任何额外的东西。这是我到目前为止所发现的:

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

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


我的问题是:

我是否可以将这些库中的一个(或其他任何内容)与链接到我的应用程序的Mac和Windows版本

如果没有,那么用于确保最小麻烦的库的最佳组合是什么?在任何一种情况下,在分发Windows版本时是否需要了解任何问题,例如需要在用户机器上安装的DLL?


更新

在@ TomTom的推荐下,我将尝试使用FreeTDS。尽管我最初的想法,它确实在Windows上编译,似乎使用TDS的本机实现被认为比ODBC更好,这显然已经过时了10年。

2 个答案:

答案 0 :(得分:3)

iOBDC是ODBC驱动程序管理器而不是实际的ODBC驱动程序,因此如果您要使用它,MS SQL Server也需要ODBC驱动程序。如果您正在使用Mac OS X进行开发并拥有适用于Windows的交叉编译器,那么您可以创建一个ODBC应用程序来执行Mac OS X上所需的这些数据库操作,然后针对Windows进行交叉编译。构建ODBC应用程序的美妙之处在于,您只需要为目标数据库和操作系统提供源代码和ODBC驱动程序,这样您就不会被查看。例如,OpenLink软件为大多数流行的关系数据库(包括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。

答案 1 :(得分:1)

嗯,一般来说,ODBC是过时的/半退休的(大约10年,如果你想知道的话)并且用一个更快/更容易处理的技术替换了OleDb。

那就是说,忘掉它 - 去实施TDS并对它感到高兴。