你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 C 和 C++ 连接到 SQL 数据库

适用于:Azure SQL 数据库

本文可帮助 C 和 C++ 开发人员连接到 Azure SQL 数据库

先决条件

要完成本指南中的步骤,需具备以下各项:

数据访问技术:ODBC 和 OLE DB

当前有两种方法连接到 Azure SQL 数据库:ODBC(开放式数据库连接)和 OLE DB(对象链接和嵌入数据库)。 最近几年,Microsoft 已在使用 ODBC 进行本地关系数据访问。 ODBC 比 OLE DB 快得多。 唯一需要说明的是,ODBC 使用的是旧的 C 样式 API。

创建 Azure SQL 数据库

请参阅入门页,以了解如何创建示例数据库。

获取连接字符串

预配 Azure SQL 数据库后,需要执行以下步骤,确定连接信息及添加用于防火墙访问的客户端 IP。

  1. Azure 门户中,使用“显示数据库连接字符串”(包含在数据库的“概述”部分中)转到 Azure SQL 数据库连接字符串

    SQL 数据库概述页的 Azure 门户的屏幕截图。突出显示了“显示数据库连接字符串”链接。

  2. 选择 ODBC 选项卡。

    Azure 门户中的 ODBC 连接字符串的屏幕截图。

  3. 复制 ODBC (包括 Node.js) [SQL 身份验证] 字符串的内容。 稍后,我们使用此字符串从 C++ ODBC 命令行解释程序进行连接。 此字符串提供驱动程序、服务器和其他数据库连接参数等详细信息。

将 IP 添加到防火墙

  1. 转到 Azure SQL 数据库逻辑服务器。 在 SQL 数据库的“概述”页上选择“服务器名称”链接,或通过 Azure 门户搜索导航到该名称。
  2. 在“安全性”下,选择“网络”。
  3. 在“ 公共访问 ”选项卡下,选择 “所选网络 ”(如果尚未选择)。
  4. 使用以下步骤将客户端 IP 添加到防火墙,以确保我们可以建立成功的连接。 选择 “添加客户端 IPv4 地址 ”或添加防火墙规则。

此时,已配置 Azure SQL 数据库,并已准备好从工作站通过 C++ 代码连接。

小窍门

临时实验室或学习设置可以接受将客户端的工作站 IP 添加到公共网络防火墙,但对于企业解决方案或长期项目,请遵循以下 安全最佳做法

  • 在服务器级别将“允许 Azure 服务和资源访问此服务器”设置为关闭。
  • 使用 VNet 服务终结点和 VNet 防火墙规则。
  • 使用专用链接。

从 Windows C/C++ 应用程序连接

可以使用通过 Visual Studio 生成的此示例在 Windows 上轻松连接到使用 ODBC 的 Azure SQL 数据库。 该示例实现可用于连接到 Azure SQL 数据库的 ODBC 命令行解释器。 此示例将数据库源名称文件 (DSN) 文件作为命令行参数,或我们先前从 Azure 门户复制的详细的连接字符串。 打开此项目的属性页,并将连接字符串作为命令行参数粘贴,如下所示:

DSN Propsfile。

确保在该数据库连接字符串中为数据库提供正确的身份验证详细信息。

启动用于生成的应用程序。 应看到如下所示确认成功连接的窗口。 甚至可以运行一些基本的 SQL 命令,例如 CREATE TABLE 验证数据库连接:

odbcsql.exe中C++连接的屏幕截图。

或者,可以使用未提供命令行参数时启动的向导创建 DSN 文件。 我们也建议尝试此选项。 可以使用此 DSN 文件进行自动化以及保护身份验证设置:

“选择数据源”页的“创建 DSN 文件”过程的屏幕截图。

祝贺! 现在已成功在 Windows 上使用 C++和 ODBC 连接到 Azure SQL。 可以继续阅读如何为 Linux 平台执行相同操作的内容。

从 Linux C/C++ 应用程序连接

可以在 Visual Studio 中开发 C++ Linux 应用程序。 若要了解详细信息,请查看以下博客:适用于 Linux 开发的 Visual C++

若要为 Linux 生成,需要运行 Linux 分发的远程计算机。 如果没有可用的部署方法,可以使用 Linux Azure 虚拟机 和各种部署方法快速设置一个。

本指南假定你已设置好 Ubuntu 16.04 Linux 分发。 这些步骤还适用于 Ubuntu 15.10、Red Hat 6 和 Red Hat 7。

按照以下步骤安装发行版 SQL 和 ODBC 所需的库:

    sudo su
    sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/mssql-ubuntu-test/ xenial main" > /etc/apt/sources.list.d/mssqlpreview.list'
    sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
    apt-get update
    apt-get install msodbcsql
    apt-get install unixodbc-dev-utf16 #this step is optional but recommended*

启动 Visual Studio。 在工具 ->选项 ->跨平台 ->连接管理器下,添加与 Linux 服务器的连接:

用于创建和删除 SSH 连接的“工具选项”中的屏幕截图。

建立通过 SSH 的连接后,创建一个空项目 (Linux) 模板:

新项目的模板的屏幕截图。

然后,可以添加 新的 C 源文件,并将其替换为此内容。 使用 ODBC API SQLAllocHandleSQLSetConnectAttr并且 SQLDriverConnect应该能够初始化和建立与数据库的连接。

正如 Windows ODBC 示例所示,您需要将 SQLDriverConnect 调用替换为此前从 Azure 门户复制的数据库连接字符串参数中的详细信息。

     retcode = SQLDriverConnect(
        hdbc, NULL, "Driver=ODBC Driver 13 for SQL"
                    "Server;Server=<yourserver>;Uid=<yourusername>;Pwd="
                    "<password>;database=<yourdatabase>",
        SQL_NTS, outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_NOPROMPT);

编译前需要完成的最后一步是将 odbc 作为库依赖项添加:

将 ODBC 添加为输入库的屏幕截图。

若要启动应用程序,请从“调试” 菜单打开 Linux 控制台:

Linux 控制台菜单选项的屏幕截图。

如果已成功连接,现在应看到 Linux 控制台中显示当前数据库名称:

Linux 控制台窗口输出的屏幕截图。

祝贺! 你已成功完成本指南,现在可以在 Windows 和 Linux 平台上通过 C++ 连接到 Azure SQL 数据库。

获取完整的 C/C++ 教程解决方案

可以在 GitHub 找到 GetStarted 包含本文中所有示例的解决方案: