在C ++中通过ODBC连接到Azure SQL数据库的问题

问题描述 投票:0回答:1

这是我关于StackOverflow的第一个问题,请原谅!

这里是问题:我试图通过Windows上的ODBC以C ++的方式连接到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

所以我做错了什么?

谢谢您的帮助!

c++ azure odbc azure-sql-database
1个回答
0
投票

我找到了解决方案!首先,我提供了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++

SQLDriverConnect Function

Connect to an ODBC Data Source (SQL Server Import and Export Wizard)

Windows with C++ : Using Databases on Windows Azure

© www.soinside.com 2019 - 2024. All rights reserved.