[英]Issue in connecting via ODBC in C++ to Azure SQL database
这是我在 StackOverflow 上的第一个问题,请原谅我的无辜!
Here's the issue: I'm trying to connect via ODBC on Windows in C++ to an Azure SQL database, but without success as I keep getting the following message:
[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));
然后,我恢复使用在未提供命令 arguments 时启动的向导创建 DSN 文件(在 Microsoft 示例中)。
我设法提供了正确的 arguments 并能够连接到我的 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 );
它正在工作!
作为参考,这里是微软官方文档的链接:
连接到 ODBC 数据源(SQL Server 导入和导出向导)
Windows 与 C++:在 Windows Z3A580F142203677F1F0BC30898F63F5 上使用数据库
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.