3

新しく作成した C++ アプリからローカルの SQL Server 2008 インスタンスに接続しようとしています。私はまだ C++ を学んでいるので、明らかな何かが欠けている可能性があります。

私は Microsoft Visual Studio 2010 を使用しており、Win32 コンソール アプリを空のプロジェクトとして作成し、main.cpp を自分で追加しています。

SQL Server インスタンスは稼働中で、SQL または統合認証を使用して他のマシンから接続できます。また、.net オブジェクトを使用して C# アプリケーションを接続することもできます。

ただし、C++ では接続を取得できず、常に失敗したと報告されます。

これまでの私のコードは次のとおりです

#include <iostream>
#include <windows.h>
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>

int main() {

    SQLHENV env;
    SQLHDBC dbc;
    SQLHSTMT stmt;
    SQLRETURN ret;
    SQLSMALLINT columns; 
    int row = 0;

    /* Allocate an environment handle */
    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
    /* We want ODBC 3 support */
    SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);
    /* Allocate a connection handle */
    SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);

    /* Connect to the DSN */
    SQLDriverConnectW(dbc, NULL, L"DRIVER={SQL Server};SERVER=(local)\DB1;DATABASE=master;UID=sa;PWD=password;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);

    /* Check for success */
    if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt))
    {
        std::cout << "Failed to connect";
    }

    std::cin.get();
    return 0;
}

http://www.easysoft.com/developer/languages/c/odbc_tutorial.htmlなどのいくつかのオンライン例を見て、これに基づいています。

常に、有効な資格情報を使用しても、私のコードはブロックに接続できませんでした。上記のリンクされた記事から extract_error を使用しようとしても、エラー メッセージはまったく表示されません。

ここで何が間違っていますか?ありがとう

4

1 に答える 1

5

質問を閉じることができるようにコメントから再投稿します。

  • (SQLWCHAR*)は明らかなエラーです。L代わりに、文字列リテラルをワイド文字列リテラルにしてみてください。

  • デフォルトの接続タイムアウトは 60 秒です。SQL プロトコルの設定を確認し、ローカルで TCP を使用するように構成されている場合は、ファイアウォールの設定も確認してください。

于 2012-07-17T20:30:17.143 に答える