#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)地方不行小弟刚自学,是在没办法,找不到错误,希望高人能解答一下