char ch[20];
for(int i=0;i<10;i++)    db_str[i].Format("%d",84);
sqlstr="INSERT INTO dydata VALUES("+db_str[0]+","+db_str[1]+","+db_str[2]+","+db_str[3]+","+db_str[4]+","+db_str[5]+","+db_str[6]+","+db_str[7]+","+db_str[8]+","+db_str[9]+")";
memcpy(ch,sqlstr,20);
rc=::SQLExecDirect(hstmt,(unsigned char*)ch,SQL_NTS);
运行后rc返回值为-1.
请各位大侠帮忙看看,谢谢了

解决方案 »

  1.   

    char ch[2048+1];
    sprintf( ch, 
        "INSERT INTO dydata VALUES('+%s+','+%s+', ...)", 
        db_str[0], db_str[1], ...
    );
    rc=::SQLExecDirect(hstmt, (unsigned char*)ch, SQL_NTS);
      

  2.   

    memcpy(ch,sqlstr,20);这个sqlstr可不止19个字符。rc=::SQLExecDirect(hstmt,(unsigned char*)sqlstr.GetBuffer(),SQL_NTS);至于SQL语法是否正确,可以拷贝到数据库环境运行看看。
      

  3.   

    1. 
    char ch[2048+1];
    sprintf( ch, 
        "INSERT INTO dydata (字段1,字段1,...) VALUES('+%s+','+%s+', ...)", 
        db_str[0], db_str[1], ...
    );
    rc=::SQLExecDirect(hstmt, (unsigned char*)ch, SQL_NTS);2. 
    char ch[2048+1];
    sprintf( ch, 
        "INSERT INTO dydata (字段1,字段2,...) VALUES('%s','%s', ...)", 
        db_str[0], db_str[1], ...
    );
    rc=::SQLExecDirect(hstmt, (unsigned char*)ch, SQL_NTS);字符型字段才需要加'%s'错误时用下面代码看看错误信息,在szMsg里。
    BYTE szState[64], szMsg[256];
    SQLINTEGER iNativeError;
    SQLSMALLINT iRetLen;
    SQLRETURN iRetCode;
    memset( szState, 0, sizeof(szState) );
    memset( szMsg, 0, sizeof(szMsg) );
    iRetCode = SQLGetDiagRec(SQL_HANDLE_STMT, hStmt, 1, 
        (BYTE *) szState, &iNativeError, (BYTE *) szMsg, 256, &iRetLen
    );