代码之家  ›  专栏  ›  技术社区  ›  David

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

  •  2
  • David  · 技术社区  · 15 年前

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

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


    最难的部分是: 程序需要运行 Mac OS X 窗户 . 我在Windows开发方面没有太多的经验,我大部分的代码都是在Mac上用xcode编写的——用一个交叉编译器和一个Windows虚拟机来编译/测试Windows版本。 (不过,我已经让GUI在Windows上工作了,所以这不是问题所在。代码在Objto-C中,但我很高兴使用纯C,甚至C++访问数据库。

    程序只需要 连接到SQL Server并执行简单查询 . 我真的想要一个库,我可以链接到我的应用程序,这样它就可以做我能做的事情。 SQLite ,但显然我传递的是连接字符串而不是数据库文件名。我希望最终用户不必在他们的机器上安装任何额外的东西。以下是迄今为止我发现的:

    • Microsoft Data Access Components 'ODBC接口 -仅限Windows,最新版本于2005年发布,这让我怀疑它是否支持最新版本的SQL Server。
    • iODBC -几乎所有东西都能运行,除了窗户。
    • FreeTDS -通过本机协议而不是通过ODBC访问SQL Server。声称在“linux/unix”上运行,但我可以在osx上编译它而没有任何问题。

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


    我的问题是:

    我能把这些图书馆中的一个(或其他的)弄到 针对Mac和Windows版本的链接 我的申请?

    如果没有,使用哪种库的最佳组合来确保最少的麻烦?在这两种情况下,在分发Windows版本时,我是否需要知道任何问题,例如需要在用户的计算机上安装的DLL?


    更新:

    在@to m to m的推荐下,我要试试freetds。尽管我最初是这么想的,但它确实是在Windows上编译的,而且似乎使用本地的TDS实现比ODBC更好,后者显然已经过时10年了。

    2 回复  |  直到 15 年前
        1
  •  1
  •   TomTom    15 年前

    好吧,一般来说,odbc已经过时/半退役(如果你想知道的话,大约10年),并且取代了更快/更容易处理的技术clled-oledb。

    也就是说,忘记它吧——去实现一个TDS,并对它感到满意。

        2
  •  3
  •   user211729    15 年前

    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的,因此未能通过时间测试,因此已被另一种特定于Windows的技术(除非您有Mono)所取代。而ODBC是一个主要的通用数据访问API,可在大多数商业操作系统的Windows、Linux/Unix、Mac OS X等系统中使用,并继续得到其他第三方供应商(如OpenLink软件)的支持和维护,这些第三方供应商将确保它仍然是一个强大且可行的跨平台和独立于数据库的API。