#include<sqlext.h>
#include<sqltypes.h>
#include<odbcss.h>SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;
int InsertPI( PersonalInformation PI ) //INSERT A PERSONAL INFORMATION
{
RETCODE retcode;
SQLINTEGER p=SQL_NTS;
SQLINTEGER cbAge=0; UCHAR szDSN[SQL_MAX_DSN_LENGTH+1]="csql",
szUID[MAXNAME]="sa",
szAuthStr[MAXNAME]="123123";
retcode=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);
retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
retcode=SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
retcode=SQLConnect(hdbc1,szDSN,4,szUID,2,szAuthStr,6);
// connection is ok!
retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1);
retcode=SQLPrepare(hstmt1,(SQLCHAR*)"INSERT INTO PersonalInformation VALUES(?,?,?,?,?,?,?)",SQL_NTS);
//到这里也是没问题的 //CopyChar()是一个对字符串类型变量的赋值函数,代码如下
//void CopyChar(char *a ,char *b){
// int i=0;
// for(;b[i]!=0;i++){
// a[i]=b[i]; }
// a[i]=0; }
char SID[18]; CopyChar(SID,PI.ID);
char SName[20]; CopyChar(SName,PI.Name);
int SAge=PI.Age;
char SPoliExpe[4]; CopyChar(SPoliExpe,PI.PoliExpe);
char SEduLevel[10]; CopyChar(SEduLevel,PI.EduLevel);
char SWorkUnit[64]; CopyChar(SWorkUnit,PI.WorkUnit);
char SHomeAddr[64]; CopyChar(SHomeAddr,PI.HomeAddr); retcode=SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,18,0,SID,0,&p);
retcode=SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,SName,0,&p);
retcode=SQLBindParameter(hstmt1,3,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,4,0,&SAge,0,&cbAge);
retcode=SQLBindParameter(hstmt1,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,4,0,SPoliExpe,0,&p);
retcode=SQLBindParameter(hstmt1,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,SEduLevel,0,&p);
retcode=SQLBindParameter(hstmt1,6,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,64,0,SWorkUnit,0,&p);
retcode=SQLBindParameter(hstmt1,7,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,64,0,SHomeAddr,0,&p);
retcode=SQLExecute(hstmt1);
if((retcode==SQL_SUCCESS)||(retcode==SQL_SUCCESS_WITH_INFO))
printf("successful execute!!!!!!!!!\n");
else
{
printf("There is a problem with INSERTING!\n");
return(0);
}
SQLCloseCursor (hstmt1);
SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);
} SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return(1); }编译之后问题就出在红色代码的那段,数据库是可以连接上的,预编译也是可以的,就是在这个SQLExecute(hstmt1)地方不行小弟刚自学,是在没办法,找不到错误,希望高人能解答一下
#include<sqltypes.h>
#include<odbcss.h>SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;
int InsertPI( PersonalInformation PI ) //INSERT A PERSONAL INFORMATION
{
RETCODE retcode;
SQLINTEGER p=SQL_NTS;
SQLINTEGER cbAge=0; UCHAR szDSN[SQL_MAX_DSN_LENGTH+1]="csql",
szUID[MAXNAME]="sa",
szAuthStr[MAXNAME]="123123";
retcode=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);
retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
retcode=SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
retcode=SQLConnect(hdbc1,szDSN,4,szUID,2,szAuthStr,6);
// connection is ok!
retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1);
retcode=SQLPrepare(hstmt1,(SQLCHAR*)"INSERT INTO PersonalInformation VALUES(?,?,?,?,?,?,?)",SQL_NTS);
//到这里也是没问题的 //CopyChar()是一个对字符串类型变量的赋值函数,代码如下
//void CopyChar(char *a ,char *b){
// int i=0;
// for(;b[i]!=0;i++){
// a[i]=b[i]; }
// a[i]=0; }
char SID[18]; CopyChar(SID,PI.ID);
char SName[20]; CopyChar(SName,PI.Name);
int SAge=PI.Age;
char SPoliExpe[4]; CopyChar(SPoliExpe,PI.PoliExpe);
char SEduLevel[10]; CopyChar(SEduLevel,PI.EduLevel);
char SWorkUnit[64]; CopyChar(SWorkUnit,PI.WorkUnit);
char SHomeAddr[64]; CopyChar(SHomeAddr,PI.HomeAddr); retcode=SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,18,0,SID,0,&p);
retcode=SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,SName,0,&p);
retcode=SQLBindParameter(hstmt1,3,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,4,0,&SAge,0,&cbAge);
retcode=SQLBindParameter(hstmt1,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,4,0,SPoliExpe,0,&p);
retcode=SQLBindParameter(hstmt1,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,SEduLevel,0,&p);
retcode=SQLBindParameter(hstmt1,6,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,64,0,SWorkUnit,0,&p);
retcode=SQLBindParameter(hstmt1,7,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,64,0,SHomeAddr,0,&p);
retcode=SQLExecute(hstmt1);
if((retcode==SQL_SUCCESS)||(retcode==SQL_SUCCESS_WITH_INFO))
printf("successful execute!!!!!!!!!\n");
else
{
printf("There is a problem with INSERTING!\n");
return(0);
}
SQLCloseCursor (hstmt1);
SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);
} SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return(1); }编译之后问题就出在红色代码的那段,数据库是可以连接上的,预编译也是可以的,就是在这个SQLExecute(hstmt1)地方不行小弟刚自学,是在没办法,找不到错误,希望高人能解答一下
不要发重复贴了。