Poco C++ 与 MS SQL 使用 ODBC
Poco C++ with MS SQL using ODBC
我正在尝试通过 ODBC 使用 Poco C++ 连接到 Microsoft SQL 服务器数据库。我试图找到示例,但还没有遇到任何示例。
我只是想用下面的代码连接到我的数据库
#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() != it [在文件 "src\SessionFactory.cpp",第 70 行]
如何使用 Poco C++ 和 ODBC 创建到 MS SQL 数据库的简单连接,然后在控制台上打印一些记录?
我在尝试编写此代码时参考了文章 Poco ODBC and while SQL loop。
任何帮助将不胜感激。
谢谢
我可以使用 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 以及如何在 Windows10 中创建它做了一些研究。我的发现如下。
什么是 DSN?
参见 https://en.wikipedia.org/wiki/Data_source_name
创建 ODBC 数据源名称 (DSN)
1. Windows10 搜索ODBC
2. 单击设置 ODBC 数据源(32 位)
3. 在选项卡 "User DSN" 下,单击添加
创建新数据源向导将启动。
4. Select SQL 服务器,点击完成
5.在接下来window
- 给个名字。这是DSN
- 给出描述
- 单击与服务器关联的下拉菜单
- 等待几秒钟
- 您计算机或网络上的数据库将显示
- Select 您要连接的数据库服务器。
- 点击下一步
6.在接下来window
- Select 与 SQL 服务器身份验证
- 输入该数据库的登录 ID(用户名)和密码
- 点击下一步
7.在接下来window
- Select "Change the default database to:" 您要连接的数据库。
- 点击下一步
8. 在接下来的 window 中,您无需更改任何内容,只需单击“完成”。
9. 出现一个新的 window,其中包含您的所有 DSN 信息。
10. 要测试 DSN 连接,请单击 "Test Data Source..."
- 如果一切正常,会出现一个新的 window "TESTS COMPLETED SUCCUSSFULLY!"
- 点击确定退出结果window。
11. 再次点击确定完成设置。
12. 在用户数据源下的主要 Window 中,您将看到新创建的 DSN。
13.点击确定退出。
我正在尝试通过 ODBC 使用 Poco C++ 连接到 Microsoft SQL 服务器数据库。我试图找到示例,但还没有遇到任何示例。
我只是想用下面的代码连接到我的数据库
#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() != it [在文件 "src\SessionFactory.cpp",第 70 行]
如何使用 Poco C++ 和 ODBC 创建到 MS SQL 数据库的简单连接,然后在控制台上打印一些记录?
我在尝试编写此代码时参考了文章 Poco ODBC and while SQL loop。
任何帮助将不胜感激。 谢谢
我可以使用 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 以及如何在 Windows10 中创建它做了一些研究。我的发现如下。
什么是 DSN? 参见 https://en.wikipedia.org/wiki/Data_source_name
创建 ODBC 数据源名称 (DSN) 1. Windows10 搜索ODBC 2. 单击设置 ODBC 数据源(32 位) 3. 在选项卡 "User DSN" 下,单击添加 创建新数据源向导将启动。 4. Select SQL 服务器,点击完成 5.在接下来window - 给个名字。这是DSN - 给出描述 - 单击与服务器关联的下拉菜单 - 等待几秒钟 - 您计算机或网络上的数据库将显示 - Select 您要连接的数据库服务器。 - 点击下一步 6.在接下来window - Select 与 SQL 服务器身份验证 - 输入该数据库的登录 ID(用户名)和密码 - 点击下一步 7.在接下来window - Select "Change the default database to:" 您要连接的数据库。 - 点击下一步 8. 在接下来的 window 中,您无需更改任何内容,只需单击“完成”。 9. 出现一个新的 window,其中包含您的所有 DSN 信息。 10. 要测试 DSN 连接,请单击 "Test Data Source..." - 如果一切正常,会出现一个新的 window "TESTS COMPLETED SUCCUSSFULLY!" - 点击确定退出结果window。 11. 再次点击确定完成设置。 12. 在用户数据源下的主要 Window 中,您将看到新创建的 DSN。 13.点击确定退出。