通过 C++ 中的 ODBC 连接到 Azure SQL 数据库时出现问题
Issue in connecting via ODBC in C++ to Azure SQL database
这是我在 Whosebug 上的第一个问题,所以请原谅我的天真!
问题是:我正在尝试通过 C++ 中 Windows 上的 ODBC 连接到 Azure SQL 数据库,但没有成功,因为我不断收到以下消息:
[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0)
我从 Azure 检索了连接字符串并确保我的 IP 地址已在防火墙设置中注册。
按照 Microsoft 提供的示例,我通过以下方式连接:
_retcode = SQLDriverConnect(
_hDbc,
NULL,
( SQLCHAR * ) connectionString,
SQL_NTS,
NULL,
0,
NULL,
SQL_DRIVER_NOPROMPT );
其中 connectionString 定义为:
const char * connectionString = "Driver = { ODBC Driver 13 for SQL Server };"
"Server = tcp:<datasource>.database.windows.net, 1433;"
"Database = <database>;"
"Uid = <account>; Pwd = <password>;"
"Encrypt = yes; TrustServerCertificate = no; Connection Timeout = 30;";
此外,我尝试在 C# 中通过 .NET 进行连接,它适用于以下连接字符串构建:
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "<datasource>.database.windows.net";
builder.UserID = "<account>";
builder.Password = "<password>";
builder.InitialCatalog = "<datavase>";
我能够执行 "SELECT @@VERSION" 语句并得到以下结果:
Microsoft SQL Azure (RTM) - 12.0.2000.8
Feb 26 2020 10:26:43
Copyright (C) 2019 Microsoft Corporation
那我做错了什么???
提前感谢您的帮助!
我找到了解决办法!
首先,我提供了 OutConnectionString 信息以显示工作连接字符串(如果有)。
SQLDriverConnect(hDbc,
GetDesktopWindow(),
pwszConnStr,
(SQLSMALLINT)wcslen(pwszConnStr),
OutConnectionString,
BufferLength,
&StringLength2Ptr,
SQL_DRIVER_COMPLETE));
然后,我恢复使用在未提供命令参数时启动的向导创建 DSN 文件(在 Microsoft 示例中)。
我设法提供了正确的参数并能够连接到我的 Azure SQL 数据库。
我打印了 OutConnectionString,这是结果(与我的预期相去甚远):
const char * connectionString = "DRIVER=ODBC Driver 17 for SQL Server;SERVER=<server>.database.windows.net;UID=<account>;PWD=<password>;Trusted_Connection=No;DATABASE=<database>;";
然后我将上面的字符串直接插入到我的代码中,这次没有提示:
_retcode = SQLDriverConnect(
_hDbc,
NULL,
( SQLCHAR * ) connectionString,
strlen( connectionString ),
NULL,
0,
NULL,
SQL_DRIVER_NOPROMPT );
它正在运行!
作为参考,这里是 Microsoft 官方文档的链接:
Connect to SQL Database using C and C++
Connect to an ODBC Data Source (SQL Server Import and Export Wizard)
这是我在 Whosebug 上的第一个问题,所以请原谅我的天真!
问题是:我正在尝试通过 C++ 中 Windows 上的 ODBC 连接到 Azure SQL 数据库,但没有成功,因为我不断收到以下消息:
[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0)
我从 Azure 检索了连接字符串并确保我的 IP 地址已在防火墙设置中注册。
按照 Microsoft 提供的示例,我通过以下方式连接:
_retcode = SQLDriverConnect(
_hDbc,
NULL,
( SQLCHAR * ) connectionString,
SQL_NTS,
NULL,
0,
NULL,
SQL_DRIVER_NOPROMPT );
其中 connectionString 定义为:
const char * connectionString = "Driver = { ODBC Driver 13 for SQL Server };"
"Server = tcp:<datasource>.database.windows.net, 1433;"
"Database = <database>;"
"Uid = <account>; Pwd = <password>;"
"Encrypt = yes; TrustServerCertificate = no; Connection Timeout = 30;";
此外,我尝试在 C# 中通过 .NET 进行连接,它适用于以下连接字符串构建:
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "<datasource>.database.windows.net";
builder.UserID = "<account>";
builder.Password = "<password>";
builder.InitialCatalog = "<datavase>";
我能够执行 "SELECT @@VERSION" 语句并得到以下结果:
Microsoft SQL Azure (RTM) - 12.0.2000.8
Feb 26 2020 10:26:43
Copyright (C) 2019 Microsoft Corporation
那我做错了什么???
提前感谢您的帮助!
我找到了解决办法! 首先,我提供了 OutConnectionString 信息以显示工作连接字符串(如果有)。
SQLDriverConnect(hDbc,
GetDesktopWindow(),
pwszConnStr,
(SQLSMALLINT)wcslen(pwszConnStr),
OutConnectionString,
BufferLength,
&StringLength2Ptr,
SQL_DRIVER_COMPLETE));
然后,我恢复使用在未提供命令参数时启动的向导创建 DSN 文件(在 Microsoft 示例中)。
我设法提供了正确的参数并能够连接到我的 Azure SQL 数据库。
我打印了 OutConnectionString,这是结果(与我的预期相去甚远):
const char * connectionString = "DRIVER=ODBC Driver 17 for SQL Server;SERVER=<server>.database.windows.net;UID=<account>;PWD=<password>;Trusted_Connection=No;DATABASE=<database>;";
然后我将上面的字符串直接插入到我的代码中,这次没有提示:
_retcode = SQLDriverConnect(
_hDbc,
NULL,
( SQLCHAR * ) connectionString,
strlen( connectionString ),
NULL,
0,
NULL,
SQL_DRIVER_NOPROMPT );
它正在运行!
作为参考,这里是 Microsoft 官方文档的链接:
Connect to SQL Database using C and C++
Connect to an ODBC Data Source (SQL Server Import and Export Wizard)