📄 dboperator.cpp
字号:
#include "StdAfx.h"
#include ".\dboperator.h"
CDbOperator::CDbOperator(void)
{
m_strDSN = "DbMarket";
m_strUSER = "hskj";
m_strPWD = "newtech";
henv = SQL_NULL_HANDLE;
hdbc = SQL_NULL_HANDLE;
m_bLink = FALSE;
OpenDatabase();
}
CDbOperator::~CDbOperator(void)
{
if(m_bLink)
{
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
m_bLink = FALSE;
}
}
CDbOperator::CDbOperator(CString strDSN, CString strUSER, CString strPWD)
{
henv = SQL_NULL_HANDLE;
hdbc = SQL_NULL_HANDLE;
m_strDSN = strDSN;
m_strUSER = strUSER;
m_strPWD = strPWD;
m_bLink = FALSE;
OpenDatabase();
}
BOOL CDbOperator::OpenDatabase()
{
SQLINTEGER cbLenth = 0 ;
SQLRETURN retcode;
retcode = SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"SQL Server","DSN=DbMarket\0Description=odbctest\0Server=(local)\0Database=DbMarket\0\0");
if(!retcode)
{
AfxMessageBox("系统数据源配置失败!");
return FALSE;
}
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv) ;
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode = SQLConnect(hdbc, (SQLCHAR*)(LPCTSTR)m_strDSN, SQL_NTS, (SQLCHAR*)(LPCTSTR)m_strUSER, SQL_NTS,
(SQLCHAR*)(LPCTSTR)m_strPWD, SQL_NTS);
if (!(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))
{
AfxMessageBox("数据库连接失败!") ;
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return FALSE;
}
}
else
{
AfxMessageBox("连接句柄分配出错") ;
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return FALSE;
}
}
else
{
AfxMessageBox("属性设置出错!") ;
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return FALSE;
}
}
else
{
AfxMessageBox("环境变量分配出错!") ;
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return FALSE;
}
m_bLink = TRUE;
return TRUE;
}
BOOL CDbOperator::IsTableExisted(CString strTableName)
{
SQLHSTMT hstmt ;
SQLRETURN retcode;
SQLINTEGER cbLenth = 0 ;
CString strSQL;
strSQL.Format("SELECT * FROM sysobjects WHERE name='%s'", strTableName);
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
if (SQLExecDirect(hstmt, (SQLCHAR*)(LPCTSTR)strSQL, SQL_NTS) == SQL_ERROR)
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
if((SQLFetch(hstmt) == SQL_SUCCESS) || (SQLFetch(hstmt) == SQL_SUCCESS_WITH_INFO))
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return TRUE;
}
else
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
}
else
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
}
BOOL CDbOperator::CreateTable(CString strSQL)
{
SQLHSTMT hstmt ;
SQLRETURN retcode;
SQLINTEGER cbLenth = 0 ;
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
if (SQLExecDirect(hstmt, (SQLCHAR*)(LPCTSTR)strSQL, SQL_NTS) != SQL_ERROR)
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return TRUE;
}
else
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
}
else
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
}
BOOL CDbOperator::AlterTable(CString strSQL)
{
SQLHSTMT hstmt ;
SQLRETURN retcode;
SQLINTEGER cbLenth = 0 ;
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
if (SQLExecDirect(hstmt, (SQLCHAR*)(LPCTSTR)strSQL, SQL_NTS) != SQL_ERROR)
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return TRUE;
}
else
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
}
else
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
}
BOOL CDbOperator::DropTable(CString strSQL)
{
SQLHSTMT hstmt ;
SQLRETURN retcode;
SQLINTEGER cbLenth = 0 ;
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
if (SQLExecDirect(hstmt, (SQLCHAR*)(LPCTSTR)strSQL, SQL_NTS) != SQL_ERROR)
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return TRUE;
}
else
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
}
else
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
}
BOOL CDbOperator::InitAllTable()
{
CStdioFile file;
CFileException fileException;
try
{
file.Open("Database.txt", CFile::modeRead | CFile::typeText, &fileException );
}
catch(CFileException* pEx)
{
char szError[1024];
ZeroMemory(szError, 1024);
pEx->GetErrorMessage(szError, 1024);
AfxMessageBox(szError);
return FALSE;
}
CString strSQL;
CString strTableName;
BOOL bIsTableExisted;
BOOL bIsCreate;
while(file.ReadString(strSQL))
{
if(GetTableNameFromSql(strSQL, strTableName))
{
bIsTableExisted = IsTableExisted(strTableName);
if(!bIsTableExisted)
{
bIsCreate = CreateTable(strSQL);
if(!bIsCreate)
{
AfxMessageBox("创建表失败!");
return FALSE;
}
}
else
{
//更新数据库,但暂不做更新
}
}
}
AfxMessageBox("创建表成功!");
file.Close();
//插入初始化表内容
return TRUE;
}
BOOL CDbOperator::InsertContent(CString strSQL)
{
SQLHSTMT hstmt ;
SQLRETURN retcode;
SQLINTEGER cbLenth = 0 ;
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
if (SQLExecDirect(hstmt, (SQLCHAR*)(LPCTSTR)strSQL, SQL_NTS) != SQL_ERROR)
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return TRUE;
}
else
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
}
else
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
}
BOOL CDbOperator::InitTableContent()
{
CStdioFile file;
CFileException fileException;
try
{
file.Open("TableContent.txt", CFile::modeRead | CFile::typeText, &fileException );
}
catch(CFileException* pEx)
{
char szError[1024];
ZeroMemory(szError, 1024);
pEx->GetErrorMessage(szError, 1024);
AfxMessageBox(szError);
return FALSE;
}
CString strSQL;
while(file.ReadString(strSQL))
{
BOOL bIsInsert = InsertContent(strSQL);
if(!bIsInsert)
{
AfxMessageBox("插入失败");
return FALSE;
}
else
{
//更新数据库,但暂不做更新
}
}
file.Close();
return TRUE;
}
BOOL CDbOperator::GetTableNameFromSql(CString strSQL, CString& strTableName)
{
//创建表的格式都是固定的模式:CREATE TABLE [TableName] ...
int nTableBegin = strSQL.Find("[");
if(nTableBegin == -1)
{
AfxMessageBox("没有找到相应的表头创建格式");
return FALSE;
}
int nTableEnd = strSQL.Find(']');
strTableName = strSQL.Mid(nTableBegin+1, nTableEnd-nTableBegin-1);
return TRUE;
}
BOOL CDbOperator::GetUserIdFromObj_User(int arrUserId[], int& nUserCount)
{
int nUserId = 0;
nUserCount = 0;
CString strSQL;
SQLHSTMT hstmt ;
SQLRETURN retcode;
SQLINTEGER cbLenth = 0 ;
strSQL = "SELECT User_Iden FROM Obj_User";
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
SQLBindCol(hstmt, 1, SQL_C_ULONG, (SQLPOINTER)&nUserId, sizeof(nUserId), &cbLenth);
if (SQLExecDirect(hstmt, (SQLCHAR*)(LPCTSTR)strSQL, SQL_NTS) == SQL_ERROR)
{
AfxMessageBox("数据操作失败!") ;
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
while((SQLFetch(hstmt) == SQL_SUCCESS) || (SQLFetch(hstmt) == SQL_SUCCESS_WITH_INFO))
{
arrUserId[nUserCount] = nUserId;
nUserCount++;
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return TRUE;
}
else
{
AfxMessageBox("数据操作失败!") ;
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
return TRUE;
}
BOOL CDbOperator::GetNinaByUserId(int nUserId, CString& strNickname)
{
SQLHSTMT hstmt ;
SQLRETURN retcode;
SQLINTEGER cbLenth = 0 ;
char cNickname[100];
ZeroMemory(cNickname, 100);
CString strSQL;
strSQL.Format("SELECT User_Nina FROM Obj_User WHERE User_Iden=%d", nUserId);
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
SQLBindCol(hstmt, 1, SQL_C_CHAR, (SQLPOINTER)cNickname, 100, &cbLenth);
if (SQLExecDirect(hstmt, (SQLCHAR*)(LPCTSTR)strSQL, SQL_NTS) == SQL_ERROR)
{
AfxMessageBox("数据操作失败!") ;
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
if((SQLFetch(hstmt) == SQL_SUCCESS) || (SQLFetch(hstmt) == SQL_SUCCESS_WITH_INFO))
{
strNickname = cNickname;
}
else
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return TRUE;
}
else
{
AfxMessageBox("获取电业局数据操作失败!") ;
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
}
BOOL CDbOperator::GetUserpwdByUsernina(CString strUsernina, CString& strUserpwd)
{
SQLHSTMT hstmt ;
SQLRETURN retcode;
SQLINTEGER cbLenth = 0 ;
char cUserpwd[100];
ZeroMemory(cUserpwd, 100);
CString strSQL;
strSQL.Format("SELECT User_Pawo FROM Obj_User WHERE User_Nina='%s'", strUsernina);
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
SQLBindCol(hstmt, 1, SQL_C_CHAR, (SQLPOINTER)cUserpwd, 100, &cbLenth);
if (SQLExecDirect(hstmt, (SQLCHAR*)(LPCTSTR)strSQL, SQL_NTS) == SQL_ERROR)
{
AfxMessageBox("数据操作失败!") ;
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
if((SQLFetch(hstmt) == SQL_SUCCESS) || (SQLFetch(hstmt) == SQL_SUCCESS_WITH_INFO))
{
strUserpwd = cUserpwd;
}
else
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return TRUE;
}
else
{
AfxMessageBox("获取电业局数据操作失败!") ;
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
return TRUE;
}
BOOL CDbOperator::GetAllUserTable(CString strTableName[], int& nTableCount)
{
SQLHSTMT hstmt ;
SQLRETURN retcode;
SQLINTEGER cbLenth = 0 ;
char cName[100];
ZeroMemory(cName, 100);
nTableCount = 0;
CString strSQL;
strSQL.Format("SELECT name FROM sysobjects WHERE xtype='%s'", "U");
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
SQLBindCol(hstmt, 1, SQL_C_CHAR, (SQLPOINTER)cName, 100, &cbLenth);
if (SQLExecDirect(hstmt, (SQLCHAR*)(LPCTSTR)strSQL, SQL_NTS) == SQL_ERROR)
{
AfxMessageBox("数据操作失败!") ;
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
while((SQLFetch(hstmt) == SQL_SUCCESS) || (SQLFetch(hstmt) == SQL_SUCCESS_WITH_INFO))
{
strTableName[nTableCount] = cName;
nTableCount++;
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return TRUE;
}
else
{
AfxMessageBox("获取电业局数据操作失败!") ;
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return FALSE;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -