oracle运行报输入绑定,oci请教---同时解决select语句输入绑定和输出绑定?

博客内容涉及到了Oracle数据库操作,使用CStatement类封装的SQL语句在尝试创建表和插入数据时遇到问题。作者怀疑是绑定参数的问题,代码中展示了创建表、插入记录的步骤以及相关函数实现,包括Prepare、ExecuteDirect和绑定函数Bind CString。

首先:数据库的连接没有问题;

其次: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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值