2016-04-13 11 views
0

ODBC経由でPoco C++を使用してMicrosoft SQL Serverデータベースに接続しようとしています。私は例を見つけようとしましたが、何も出て来ません。私は単純に次のコードODBCを使用したMS SQLのPoco C++

#include <iostream> 
#include <string> 
#include "Poco/Data/Session.h" 

using namespace std; 
using namespace Poco::Data; 


int main() 
{ 
    cout << "Testing Poco C++ with MS SQL Server" << endl; 
    const string CONNECTION_STRING("DRIVER={SQL Server};Server=DESKTOP-32BKOVJ\\SQLEXPRESS;Database=Test2;User ID=sa;Password=IaSS1982;Trusted_Connection=yes;"); 
    Session session("ODBC", CONNECTION_STRING); 
    return 0; 
} 

私はこのコードを実行するたびに、私のデータベースに接続しようとしています

、私は以下のアサーションの失敗を取得: アサーション違反:!)(_connectors.endを=それを[ファイル内の "src \ SessionFactory.cpp"、行70]

Poco C++とODBCを使用してMS SQLデータベースへの簡単な接続を作成してから、コンソールでレコードをいくつか印刷できますか?

このコードを書き込もうとしているうちに、記事Poco ODBC and while SQL loopを参照していました。

ご協力いただきますようお願い申し上げます。 ありがとう

答えて

0

Poco C++ライブラリを使用してMicrosoft SQL Server 2014データベースに接続できます。あなたは、Windows SDKの一部であるインストールされているODBCドライバを入手したら、次のコードは、このような など、すべての基本的な操作を行う必要があります - を作成 - を読む - を更新 -

#include <iostream> 
#include <string> 
#include <sstream> 
#include "Poco/Data/RecordSet.h" 
#include "Poco/Data/Session.h" 
#include "Poco/Data/ODBC/Connector.h" 

using namespace std; 
using namespace Poco::Data; 

bool AddUser(Session& session, const size_t& USER_ID, const string& FIRST_NAME, const string& LAST_NAME); // [C]reate 
void PrintUsers(Session& session);                   // [R]etrieve 
bool UpdateLastName(Session& session, const string& FIRST_NAME, const string& NEW_LAST_NAME);    // [U]pdate 
bool DeleteUser(Session& session, const size_t& USER_ID);             // [D]elete 

int main() 
{ 
    try 
    { 
     cout << "Testing Poco C++ with MS SQL Server" << endl; 
     Poco::Data::ODBC::Connector::registerConnector(); 
     const string CONNECTION_STRING("DRIVER={SQL Server};Server=DESKTOP-32BKOVJ\\SQLEXPRESS;Database=Test2;User ID=sa;Password=abc"); 
     //const string CONNECTION_STRING("DSN=PocoMsSQLTest;Uid=sa;Pwd=abc"); 
     Session session("ODBC", CONNECTION_STRING); 
     if (session.isConnected()) 
     { 
      PrintUsers(session); 
      cout << "\n" << endl; 

      AddUser(session, 5, "Loki", "Moki"); 
      PrintUsers(session); 
      cout << "\n" << endl; 

      UpdateLastName(session, "Loki", "Poki"); 
      PrintUsers(session); 
      cout << "\n" << endl; 

      DeleteUser(session, 5); 
      PrintUsers(session); 
      cout << "\n" << endl; 


     } 
     else 
     { 
      cerr << "Session not able to connect" << endl; 
     } 
    } 
    catch (const exception& e) 
    { 
     cerr << "Exception: " << e.what() << endl; 
    } 
    //////////////////////////////////////////////////////// 
    Poco::Data::ODBC::Connector::unregisterConnector(); 
    return 0; 
} 

// Create 
bool AddUser(Session& session, const size_t& USER_ID, const string& FIRST_NAME, const string& LAST_NAME) 
{ 
    Statement select(session); 
    stringstream ss; 
    ss << "INSERT INTO Users (UserID, FirstName, LastName) VALUES ("; 
    ss << USER_ID << ", " << "\'" << FIRST_NAME << "\'" << ", " << "\'" << LAST_NAME << "\')"; 
    const string& SQL = ss.str(); 
    select << SQL; 
    return select.execute(); 
} 


// Retrieve 
void PrintUsers(Session& session) 
{ 
    Statement select(session); 
    select << "SELECT * FROM Users"; 
    select.execute(); 
    RecordSet rs(select); 
    bool more = rs.moveFirst(); 

    if (more) 
    { 
     cout << rs.columnName(0) << "\t" << rs.columnName(1) << "\t" << rs.columnName(2) << endl; 
    } 

    while (more) 
    { 
     cout << rs[0].convert<string>() << "\t" << rs[1].convert<string>() << "\t\t" << rs[2].convert<string>() << endl; 
     more = rs.moveNext(); 
    } 

} 

// Update 
bool UpdateLastName(Session& session, const string& FIRST_NAME, const string& NEW_LAST_NAME) 
{ 
    Statement select(session); 
    stringstream ss; 
    ss << "UPDATE Users SET LastName=" << "\'" << NEW_LAST_NAME << "\'" << " WHERE FirstName=" << "\'" << FIRST_NAME << "\'"; 
    const string& SQL = ss.str(); 
    select << SQL; 
    return select.execute(); 
} 


// Delete 
bool DeleteUser(Session& session, const size_t& USER_ID) 
{ 
    Statement select(session); 
    stringstream ss; 
    ss << "DELETE FROM Users WHERE UserID = " << USER_ID; 
const string& SQL = ss.str(); 
    select << SQL; 
    return select.execute(); 
} 

私はは、connection_stringを削除しますODBCドライバを直接使用してデータベースに接続しています。 DSNを使用してデータベースに接続する場合は、このCONNECTION_STRINGにコメントし、下のコメントを外します。

私は、DSNとWindows 10での作成方法について少し研究しました。私の所見は以下の通りです。

DSNとは何ですか?

https://en.wikipedia.org/wiki/Data_source_nameは、ODBCデータソース名(DSN)を設定し、ODBCデータソースのODBC 2.(32ビット)タブ "ユーザーDSN" の下 3. 1. Windowsの10検索の作成を参照してください、 [追加]をクリックします。 新しいデータソースの作成ウィザードが起動します。 4. [SQL Server]を選択し、[完了]をクリックします。 5.次のウィンドウで - 名前を付けます。これはDSNです - 説明を与える - サーバーに関連付けられたドロップダウンをクリックしてください - 数秒待ってください - コンピュータまたはネットワーク上のデータベースに が表示されます - 接続するデータベースサーバーを選択します。 - 次のウィンドウ で次 6.をクリックしてください - SQL Server認証 を選択 - そのデータベース のためにあなたのログインID(ユーザー名)とパスワードを入力します - 次のウィンドウ で次 7.をクリックしてください - 選択して、「デフォルトを変更データベースに接続するデータベースを指定します。 - 次へをクリックしてください 8.次のウィンドウでは、何も変更する必要はありません。 9.すべてのDSN情報を含む新しいウィンドウが表示されます。 10. DSN接続をテストするには、 "Test Data Source ..."をクリックしてください。 - すべてがOKならば、新しいウィンドウが表示されます。 "TESTS COMPLETED SUCCUSSFULLY!" - OKをクリックして結果ウィンドウを終了します。 11.もう一度[OK]をクリックして設定を完了します。 12。ユーザーデータソースの下のメインウィンドウに、新しく作成されたDSNが表示されます。 13. [OK]をクリックして終了します。

出典:https://www.youtube.com/watch?v=ehVFtmhPwxs

関連する問題