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

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

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

确保具有以下内容:

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

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

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

数据访问技术:ODBC 和 OLE DB

连接到 Azure SQL DB 没有任何不同,且当前有两种方法连接到数据库: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 DB,并已准备好通过 C++ 代码连接。

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

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

DSN Propsfile

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

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

SQL 命令

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

创建 DSN 文件

祝贺! 现在已成功在 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 框的连接:

工具选项

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

新建项目模板

然后,可以添加 新的 C 源文件,并将其替换为此内容。 使用 ODBC APIs 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 作为库依赖项添加:

将 ODBC 作为输入库添加

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

Linux 控制台

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

Linux 控制台窗口输出

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

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

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

后续步骤

其他资源