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

适用于:Azure SQL 数据库

本文面向尝试连接到 Azure SQL 数据库的 C 和 C++ 开发人员。 它分为多个部分,方便大家选择最感兴趣的部分进行查看。

C/C++ 教程的先决条件

确保具有以下内容:

  • 有效的 Azure 帐户。 如果没有 Azure 订阅,可注册一个试用版订阅
  • Visual Studio。 必须安装 C++ 语言组件才能生成和运行此示例。
  • Visual Studio Linux 开发。 如果基于 Linux 开发,还必须安装 Visual Studio Linux 扩展。

Azure SQL 数据库和虚拟机上的 SQL Server

Azure SQL 数据库基于 Microsoft SQL Server 构建,旨在提供高可用性、高性能和可缩放的服务。 在本地运行的专有数据库中使用 Azure SQL 有很多好处。 使用 Azure SQL 时,需要安装、设置、维护或管理的不是数据库,而是数据库的内容和结构。 我们通常担心的数据库容错和冗余等功能全都内置其中。

Azure 目前有两个选项可用于托管 SQL Server 工作负载:Azure SQL 数据库(数据库即服务)和虚拟机 (VM) 上的 SQL Server。 我们不会详细介绍两者之间的差异,但需要了解的是,如果想要利用云服务提供的成本节省和性能优化,那么 Azure SQL 数据库是使用新的基于云的应用程序的最佳选择。 如果正在考虑将本地应用程序迁移或扩展到云中,Azure 虚拟机上的 SQL Server 可能更适合。 为了使本文简单明了,让我们创建一个 Azure SQL 数据库。

数据访问技术:ODBC 和 OLE DB

连接到 Azure SQL 数据库没有任何差别,目前可以通过两种方法连接到数据库:ODBC(开放式数据库连接)和 OLE DB(对象链接与嵌入数据库)。 最近几年,Microsoft 已在使用 ODBC 进行本地关系数据访问。 ODBC 相对简单,并且比 OLE DB 快得多。 唯一需要说明的是,ODBC 使用的是旧的 C 样式 API。

步骤 1:创建 Azure SQL 数据库

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

步骤 2:获取连接字符串

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

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

ODBCConnectionString

ODBCConnectionStringProps

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

步骤 3:将 IP 添加到防火墙

转到服务器的防火墙部分,并使用以下步骤将客户端 IP 添加到防火墙,以确保我们可以建立成功的连接:

AddyourIPWindow

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

步骤 4:从 Windows C/C++ 应用程序连接

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

DSN Propsfile

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

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

SQL Commands

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

Create DSN File

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

步骤 5:从 Linux C/C++ 应用程序连接

也许你还不知道,Visual Studio 现在也允许开发 C++ Linux 应用程序。 可以在 Visual C++ for Linux Development (用于 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 框的连接:

Tools Options

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

New project template

然后,可以添加 新的 C 源文件,并将其替换为此内容。 使用 ODBC API SQLAllocHandle、SQLSetConnectAttr 和 SQLDriverConnect 时,应能够初始化并建立与数据库的连接。 和 Windows ODBC 示例一样,需要使用数据库连接字符串参数的详细信息(之前从 Azure 门户复制)替换 SQLDriverConnect 调用。

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

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

Adding ODBC as an input library

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

Linux Console

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

Linux Console Window Output

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

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

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

后续步骤

其他资源