利用OCI添加数据
在利用了OCI进行数据查询以后,想试试看插入数据是否顺利,所以就做了以下的代码:
1
sprintf( szSqlStr,
"
%s
"
,
"
INSERT INTO EMP VALUES (:EMPNO,:ENAME,:AGE,:SEX)
"
);
2
3 cdr CdrValue;
4 strcpy(CdrValue.empno, " 031231304 " );
5 strcpy(CdrValue.ename, " 小居 " );
6 strcpy(CdrValue.sex, " 男 " );
7 CdrValue.age = 20 ;
8
9 OCIStmtPrepare(m_stmthp,m_errhp,(text * )szSqlStr,strlen(szSqlStr),OCI_NTV_SYNTAX,OCI_DEFAULT);
10
11 OCIBindByPos(m_stmthp, & bndp, m_errhp, 1 , (dvoid * )CdrValue.empno, (sb4) sizeof (CdrValue.empno), SQLT_STR, NULL, NULL, NULL, 0 , NULL, (ub4)OCI_DEFAULT);
12 OCIBindByPos(m_stmthp, & bndp, m_errhp, 2 , (dvoid * )CdrValue.ename, (sb4) sizeof (CdrValue.ename), SQLT_STR, NULL, NULL, NULL, 0 , NULL, (ub4)OCI_DEFAULT);
13 OCIBindByPos(m_stmthp, & bndp, m_errhp, 4 , (dvoid * )CdrValue.sex, (sb4) sizeof (CdrValue.sex), SQLT_STR, NULL, NULL, NULL, 0 , NULL, (ub4)OCI_DEFAULT);
14 OCIBindByPos(m_stmthp, & bndp, m_errhp, 3 , (dvoid * ) & CdrValue.age, (sb4) sizeof (CdrValue.age), SQLT_INT, NULL, NULL, NULL, 0 , NULL, (ub4)OCI_DEFAULT);
15
16 OCIStmtExecute( m_svchp, m_stmthp, m_errhp, (ub4) 1 , (ub4) 0 ,(OCISnapshot * )NULL,(OCISnapshot * )NULL, (ub4)OCI_COMMIT_ON_SUCCESS);
2
3 cdr CdrValue;
4 strcpy(CdrValue.empno, " 031231304 " );
5 strcpy(CdrValue.ename, " 小居 " );
6 strcpy(CdrValue.sex, " 男 " );
7 CdrValue.age = 20 ;
8
9 OCIStmtPrepare(m_stmthp,m_errhp,(text * )szSqlStr,strlen(szSqlStr),OCI_NTV_SYNTAX,OCI_DEFAULT);
10
11 OCIBindByPos(m_stmthp, & bndp, m_errhp, 1 , (dvoid * )CdrValue.empno, (sb4) sizeof (CdrValue.empno), SQLT_STR, NULL, NULL, NULL, 0 , NULL, (ub4)OCI_DEFAULT);
12 OCIBindByPos(m_stmthp, & bndp, m_errhp, 2 , (dvoid * )CdrValue.ename, (sb4) sizeof (CdrValue.ename), SQLT_STR, NULL, NULL, NULL, 0 , NULL, (ub4)OCI_DEFAULT);
13 OCIBindByPos(m_stmthp, & bndp, m_errhp, 4 , (dvoid * )CdrValue.sex, (sb4) sizeof (CdrValue.sex), SQLT_STR, NULL, NULL, NULL, 0 , NULL, (ub4)OCI_DEFAULT);
14 OCIBindByPos(m_stmthp, & bndp, m_errhp, 3 , (dvoid * ) & CdrValue.age, (sb4) sizeof (CdrValue.age), SQLT_INT, NULL, NULL, NULL, 0 , NULL, (ub4)OCI_DEFAULT);
15
16 OCIStmtExecute( m_svchp, m_stmthp, m_errhp, (ub4) 1 , (ub4) 0 ,(OCISnapshot * )NULL,(OCISnapshot * )NULL, (ub4)OCI_COMMIT_ON_SUCCESS);
一开始总是出现不能访问一段内存地址,后来才发现 & CdrValue.age没有加"&",懊恼死了,花费了我大量的时间,下次一定小心