📄 wtcommander.cpp
字号:
/*
* 文件名: WTCommander.cpp
*
* 作者: 施立虹
*
* 描述: 用来对 oracle 数据库数据进行增、删、改等操作!
*
* 全局变量:无
*
* 修订记录:
* 日期 修订者 修订描述
* 2004-06-16 施立虹 创建本文件
*/
// WTCommander.cpp: implementation of the CWTCommander class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "WTCommander.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWTCommander::CWTCommander()
{
}
CWTCommander::~CWTCommander()
{
}
void CWTCommander::Reset()
{
m_strSQL = _T("");
}
/*
* 函数名称: SetCommand
* 编写者: 施立虹
* 功能: 设置sql命令
* 输入参数: lpszSQL
* 输出参数:
* 返回值: TRUE 或 FALSE
* 注意事项:
* 修订记录:
* 日期 修订者 修订描述
* 2004-06-16 施立虹 创建
*/
BOOL CWTCommander::SetCommand(LPCSTR lpszSQL)
{
m_strSQL = lpszSQL;
return TRUE;
}
/*
* 函数名称: Execute
* 编写者: 施立虹
* 功能: 执行sql命令
* 输入参数:
* 输出参数:
* 返回值: TRUE 或 FALSE
* 注意事项:
* 修订记录:
* 日期 修订者 修订描述
* 2004-06-16 施立虹 创建
*/
BOOL CWTCommander::Execute()
{
long i = 0;
int interpretation = 1;
sword status = 0;
//用来绑定空间数据的点元素数组和几何信息数据
OCIBind *bnd1p = NULL, *bnd2p = NULL;
//存放SQL语句
char query[1024] = {0};
static CWTValue::sdo_elem_info_array *elem_info;//空间数据"几何体元素信息"数组
static CWTValue::sdo_ordinate_array *ordinates;//空间数据"点元素"数组
static OCIType *elem_info_tdo = NULL;
static OCIType *ordinates_tdo = NULL;
static CWTValue::SDOGEOMETRY object;
static CWTValue::SDOGEOMETRY *pObject = NULL;
pObject = &object;
static OCIType *geo_tdo = NULL;
geo_tdo = GetTdo(SDO_GEOMETRY);
//语句句柄
OCIStmt *stmthp2;
status = OCIHandleAlloc((dvoid *)m_pDataBase->m_phenv, (dvoid **)&stmthp2, OCI_HTYPE_STMT, 0,0);//分配语句句柄
sprintf(query, "%s",m_strSQL);
status = OCIStmtPrepare(stmthp2, m_pError->m_pherr,
(text *)query, (ub4)strlen((char *)query),
(ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT);
if(status != OCI_SUCCESS)
{
m_pError->m_status = status;
return FALSE;
}
if(m_listParams.GetSize() > 0)
{
//读取对象的数据类型
elem_info_tdo = GetTdo(SDO_ELEM_INFO_ARRAY);
ordinates_tdo = GetTdo(SDO_ORDINATE_ARRAY);
//创建两个新对象
status = OCIObjectNew(m_pDataBase->m_phenv, m_pError->m_pherr, m_pDataBase->m_phsvc, OCI_TYPECODE_VARRAY,
elem_info_tdo, (dvoid *)NULL,
OCI_DURATION_SESSION,
FALSE, (dvoid **)&pObject->sdoElemInfo);
if(status != OCI_SUCCESS)
{
m_pError->m_status = status;
return FALSE;
}
//创建对象
status = OCIObjectNew(m_pDataBase->m_phenv, m_pError->m_pherr, m_pDataBase->m_phsvc, OCI_TYPECODE_VARRAY,
ordinates_tdo, (dvoid *)NULL,
OCI_DURATION_SESSION,
FALSE, (dvoid **)&pObject->sdoOrdinates);
if(status != OCI_SUCCESS)
{
m_pError->m_status = status;
return FALSE;
}
// int nVal[512] = {0};
float flVal[512] = {0};
text *TextVal[512] = {0};
CWTParameter *pParamter = NULL;
//获取输入参数
for(int i = 0;i < m_listParams.GetSize();i++)
{
pParamter = m_listParams.GetAt(i);
text TextMrak[512] = {0};
wsprintf((char *)TextMrak,"%s",pParamter->GetMark());
CWTValue::ValType valType = pParamter->GetValueType();
switch(valType)
{
case CWTValue::WTINT:
case CWTValue::WTLONG:
/* {
nVal[i] = (int)pParamter->m_dlVal;
status = OCIBindByName(m_phstmt,
&pParamter->m_phbid,
pError->m_pherr,
(text *)TextMark,
-1,
(int *)&nVal[i],
sizeof(nVal[i]),
SQLT_INT,
0, 0, 0, 0, 0,
OCI_DEFAULT);
status = OCIBindByName(m_phstmt,
&pParamter->m_phbid,
pError->m_pherr,
(text *)TextMark,
-1,
(int *)&nVal[i],
sizeof(nVal[i]),
SQLT_INT,
0, 0, 0, 0, 0,
OCI_DEFAULT);
if(status != OCI_SUCCESS)
{
pError->m_status = status;
return FALSE;
}
}
*/
case CWTValue::WTFLOAT:
case CWTValue::WTDOUBLE:
{
sword status = 0;
flVal[i] = (float)pParamter->m_dlVal;
//绑定变量
status = OCIBindByName(stmthp2,
&pParamter->m_phbid,
m_pError->m_pherr,
(text *)TextMrak,
-1,
(float *)&flVal[i],
sizeof(flVal[i]),
SQLT_FLT,
0, 0, 0, 0, 0,
OCI_DEFAULT);
if(status != OCI_SUCCESS)
{
m_pError->m_status = status;
return FALSE;
}
}
break;
case CWTValue::WTDATE:
case CWTValue::WTCSTRING:
{
int nLen = 0;
sword status = 0;
nLen = pParamter->m_strVal.GetLength();
TextVal[i] = new text[nLen + 1];
wsprintf((char *)TextVal[i],"%s",pParamter->m_strVal);
TextVal[i][nLen] = '\0';
nLen += 1;
//绑定变量
status = OCIBindByName(stmthp2, &pParamter->m_phbid, m_pError->m_pherr,
(text *)TextMrak, -1,
(ub1 *)TextVal[i], nLen + 1,
SQLT_STR,
0, 0, 0, 0, 0,
OCI_DEFAULT);
if(status != OCI_SUCCESS)
{
m_pError->m_status = status;
return FALSE;
}
}
break;
case CWTValue::WTOBJECT:
{
//转换成空间数据
if(!CToOCI(*pObject,pParamter->m_CGeotry))
{
};
//绑定变量
status = OCIBindByName(stmthp2, &bnd2p, m_pError->m_pherr,
(text *)TextMrak, (sb4)-1, (dvoid *)0,
(sb4)0, SQLT_NTY, (dvoid *)0, (ub2 *)0,
(ub2 *)0, (ub4)0, (ub4 *)0,
(ub4)OCI_DEFAULT);
if(status != OCI_SUCCESS)
{
m_pError->m_status = status;
return FALSE;
}
//绑定对象
status = OCIBindObject(bnd2p, m_pError->m_pherr, geo_tdo,
(dvoid **)&pObject, (ub4 *)0,
(dvoid **)0, (ub4 *)0);
if(status != OCI_SUCCESS)
{
m_pError->m_status = status;
return FALSE;
}
}
break;
default:
{
}
break;
}
}
//执行 sql 语句
status = OCIStmtExecute(m_pDataBase->m_phsvc,stmthp2,m_pError->m_pherr,
(ub4)1,0,NULL,NULL,OCI_DEFAULT);
if(status == OCI_ERROR)
{
m_pError->m_status = status;
return FALSE;
}
//提交
status = OCITransCommit(m_pDataBase->m_phsvc,m_pError->m_pherr,(ub4)0);
if(status == OCI_ERROR)
{
m_pError->m_status = status;
return FALSE;
}
for(i = 0 ;i < 512 ;i++)
{
if(TextVal[i] != 0)
{
delete TextVal[i];
TextVal[i] = 0;
}
}
//释放对象
OCIObjectFree(m_pDataBase->m_phenv, m_pError->m_pherr,
(dvoid *)pObject->sdoOrdinates,
(ub2)OCI_OBJECTFREE_FORCE);
//释放对象
OCIObjectFree(m_pDataBase->m_phenv, m_pError->m_pherr,
(dvoid *)pObject->sdoElemInfo,
(ub2)OCI_OBJECTFREE_FORCE);
//释放语句句柄
OCIHandleFree((dvoid *)stmthp2, (ub4)OCI_HTYPE_STMT);
return TRUE;
}
//执行sql 语句
status = OCIStmtExecute(m_pDataBase->m_phsvc,stmthp2,m_pError->m_pherr,
(ub4)1,0,NULL,NULL,OCI_DEFAULT);
if(status != OCI_SUCCESS)
{
m_pError->m_status = status;
return FALSE;
}
//提交
status = OCITransCommit(m_pDataBase->m_phsvc,m_pError->m_pherr,(ub4)0);
if(status != OCI_SUCCESS)
{
m_pError->m_status = status;
return FALSE;
}
//释放语句句柄
OCIHandleFree((dvoid *)stmthp2, (ub4)OCI_HTYPE_STMT);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -