2016-04-13 34 views
0

Microsoft SQL Server veritabanına Poco C++ ile ODBC üzerinden bağlanmaya çalışıyorum. Örnek bulmaya çalıştım ama hiç rastlamadım. Ben sadece aşağıdaki kodlaPoco C++ ile MS SQL kullanarak ODBC

#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; 
} 

Bu kodu çalıştırmak her zaman benim veritabanına bağlanmak çalışıyorum

, aşağıdaki onaylama işlemi hatası alıyorum: Onaylama ihlali:!) (_connectors.end = o [dosya "src \ SessionFactory.cpp", satır 70]

Poco C++ ve ODBC kullanarak MS SQL Veritabanı ile basit bir bağlantıyı nasıl oluşturabilirim ve sonra konsolda bazı kayıtları yazdırabilir miyim? Bu kodu yazarken Poco ODBC and while SQL loop numaralı makaleye atıfta bulunuyordum.

Herhangi bir yardım büyük takdir edilecektir. Teşekkür ederiz

cevap

0

Poco C++ kütüphanesini kullanarak Microsoft SQL Server 2014 veritabanına bağlanabiliyorum. Windows SDK bir parçası olan yüklü ODBC sürücülerini edindikten sonra, aşağıdaki kodu, gibi tüm temel işlemleri yapmalıdır - oluşturma - Oku - Güncelleme -

#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(); 
} 

Ben connection_string Sil kullanarak veritabanına bağlanmak için doğrudan ODBC sürücüleri kullanıyor. Veritabanına bağlanmak için bir DSN kullanmak istiyorsanız, bu CONNECTION_STRING yorumunu yapın ve aşağıdakileri kaldırın.

DSN nedir ve Windows 10'da nasıl oluşturulacağı üzerine biraz araştırma yaptım. Bulgularım aşağıda verilmiştir.

DSN nedir?

https://en.wikipedia.org/wiki/Data_source_name bir ODBC veri kaynağı adı (DSN) ayarlama ODBC veri kaynakları üzerinde ODBC 2. Click (32-bit) sekmesi "Kullanıcı DSN" altında 3 için 1. Windows 10 arama oluşturma Bkz, Ekle Yeni Veri Kaynağı Oluştur sihirbazı başlayacaktır. 4. SQL Server'ı seçin ve Finish 5'i tıklayın. Sonraki pencerede - Bir ad verin. Bu DSN - Verme açıklaması - Sunucu ile ilişkili açılır aşağı tıklayın - Birkaç saniye bekleyin - Bilgisayarınızdaki veya ağdaki veritabanında görünecek - Bağlanmak istediğiniz veritabanı sunucusunu seçin. - Bir sonraki pencerede yılında İleri 6. tıklayın - SQL Server kimlik doğrulaması ile Seç - o veritabanı için Oturum kimliğini (kullanıcı adı) ve şifre girin - Bir sonraki pencerede yılında İleri 7. tıklayın - Seç "varsayılan değiştirin veritabanı: "bağlamak istediğiniz veritabanı. - İleri'yi tıklatın 8. Bir sonraki pencerede bir şey değiştirmek zorunda değilsiniz, sadece Son'u tıklatın. 9. Tüm DSN bilgilerinize sahip yeni bir pencere açılır. 10. DSN bağlantısını test etmek için "Test Verileri Kaynağı ..." ye tıklayın - Her şey yolundaysa, yeni bir pencere "TESTLER TAMAMLANMIŞ BAŞARIYLA!" - Sonuç penceresinden çıkmak için Tamam'a tıklayın. 11. Tamam'ı tekrar tıklatın, kurulumu tamamlayın. 12.Kullanıcı Veri Kaynakları altındaki ana pencerede yeni oluşturulan DSN'nizi göreceksiniz. 13. Çıkmak için Tamam'a tıklayın.

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