目录
sql操作类的基本情况
我个人在实现C++操作sql server时,是通过编写sql操作类作为工具来实现的。其中的数据成员如下代码所示:
class man_sql
{
public:
protected:
SQLHENV env; //环境句柄
SQLHDBC dbc; //连接句柄
SQLHSTMT stmt; //语句句柄
SQLRETURN ret; //结果返回位置
private:
};
接下来在这个系列文章中,我们将向这个操作类中增加一部分函数,来充实该操作类的功能。实现对“c++操作Sql Server”这一功能的封装。
头文件使用
在用c++操作sql数据库时,我们通常需要用到的两个头文件为: (在后续的文章中,将不再赘述这一问题。)
#include <windows.h>
#include <sqlext.h>
Sql数据库的打开:
参数说明:const string&userid:SQL SERVER 使用用户名
const string &passward:SQL SERVER 密码
const string &databasename:要访问的数据库名
bool man_sql::sql_connect(const string &userid, const string &passward,
const string &databasename)
{
/*申请环境句柄 */
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
/** 申请数据库连接句柄 */
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
/*连接到数据库*/
string a="DRIVER={SQL Server};SERVER=(local);DATABASE=\0";
a+=databasename+";UID="+userid+";PWD="+passward+";";
size_t converted=0;
wchar_t *w;
w=(wchar_t *)malloc((a.size()+1)*sizeof(wchar_t));
mbstowcs_s(&converted, w, a.size()+1, a.c_str(), _TRUNCATE);
SQLDriverConnectW(dbc, NULL, w, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
/*数据库连接成功则返回1,连接失败则返回0*/
if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt))
return 0;
else return 1;
}
Sql数据库的关闭:
void man_sql::sql_close()
{
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
}