首先:数据库的连接没有问题;
其次:CStatement我封装的一个类;请问是否我绑定有问题?如果是,那么具体怎么弄?有点晕。
//创建一个test表,先不用CLOB。
创建也没有问题;
CStatement stmt(conn);
char* strStmt = "create table test( name char(20), sex char(6), id char(10))"; /*, picture CLOB*/
//准备语句
stmt.Prepare(strStmt);
//执行
stmt.ExecuteDirect();
//插入一条记录
char ename[20]= "fuxing", esex[4] = "Y", eid[10] = "second";
char* strStmt2 = "insert into test ( name , sex , id ) values(:ename , :esex , :eid ) ";
stmt.Prepare(strStmt2);
//按名字绑定
stmt.BindCString( ":ename" , ename , 0);
stmt.BindCString( ":esex" , esex , 0);
stmt.BindCString( ":eid" , eid , 0);
stmt.ExecuteDirect();
具体函数实现:
//下面也应该没有问题。
BOOL CStatement::Prepare(LPCSTR szSQL)
{
if (m_pDb == NULL) return FALSE;
if (!m_bConnected) return FALSE;
SetStatement(szSQL);
if (OCIStmtPrepare(m_pDb->m_pStmHpp, m_pDb->m_pErrHpp,
(OraText *)m_stmt.c_str(), (ub4) strlen(m_stmt.c_str()),
(ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT))
{
return FALSE;
}
return TRUE;
}
BOOL CStatement::ExecuteDirect()
{
if(OCIStmtExecute(m_pDb->m_pSvcHpp,m_pDb->m_pStmHpp,m_pDb->m_pErrHpp,
(ub4)1,(ub4)0,(const OCISnapshot *)NULL,(OCISnapshot *)NULL, (ub4) OCI_DEFAULT)!= OCI_SUCCESS)
{
return FALSE;
}
Commit();
return TRUE;
}
//以下是绑定函数
BOOL CStatement::BindCString(const char* name , char* pCString , sb2* Indp)
{
return Bind(SQLT_STR , name , pCString , sizeof(pCString) , Indp);
}
/*
*通过名字绑定
*/
BOOL CStatement::Bind(ub2 ColumnType,const char* Name, void* Buffer, int ElementSize,/*int Type,*/sb2* Indp /*= 0*/ )
{
if (!m_bConnected) return FALSE;
if ( m_CurrentBinded > MAX_BINDPARAMENT_NUMBER ) return FALSE;
if (OCIBindByName(m_pDb->m_pStmHpp , &m_pBindHpp[m_CurrentBinded++] , m_pDb->m_pErrHpp ,
(text*) Name , -1 /*strlen(Name)*/ ,(dvoid*)Buffer,(sb4)ElementSize,ColumnType,
(dvoid*)Indp ,(ub2*)0,(ub2*)0,(ub4)0,(ub4 *)0,(ub4)OCI_DEFAULT))
{
return FALSE;
}
return TRUE;
}
博客内容涉及到了Oracle数据库操作,使用CStatement类封装的SQL语句在尝试创建表和插入数据时遇到问题。作者怀疑是绑定参数的问题,代码中展示了创建表、插入记录的步骤以及相关函数实现,包括Prepare、ExecuteDirect和绑定函数Bind CString。
2707

被折叠的 条评论
为什么被折叠?



