我在LINUX用FREETDS进行C++编程,成功连接到远程的SQL后,却不能对数据库进行读写等操作。我参照FREETDS提供的TSQL。C写了个类,却发现没法对数据库进行具体操作。我的QUERY函数是这样写的:
 int mssql::Query(const char * query)
{
TDS_INT resulttype;
TDS_INT srclen;
int rc,rows;
TDSCOLUMN *col;
int ctype;
unsigned char *src;
CONV_RESULT dres; if(query == NULL || strcmp(query,"") == 0) {
printf("SQL sentance is null!\n");
return 0;
}

rc = tds_submit_query(m_pTds,query);
if(rc != TDS_SUCCEED){
printf("tds_submit_query() failed!\n");
return 0;
}

while((rc=tds_process_tokens(m_pTds, &resulttype, NULL, TDS_TOKEN_RESULTS)) == TDS_SUCCEED) {
switch (resulttype) {
case TDS_ROWFMT_RESULT:
for (int i = 0; i < m_pTds->current_results->num_cols; i++)
 {
fprintf(stdout, "%s\t", m_pTds->current_results->columns[i]->column_name);
//printf(stdout);
}
printf("(return status = %d)\n",resulttype);
break;
case TDS_COMPUTE_RESULT:
case TDS_ROW_RESULT:
rows = 0;
while ((rc = tds_process_tokens(m_pTds, &resulttype, NULL, TDS_STOPAT_ROWFMT|TDS_RETURN_DONE|TDS_RETURN_ROW|TDS_RETURN_COMPUTE)) == TDS_SUCCEED) {
if (resulttype != TDS_ROW_RESULT && resulttype != TDS_COMPUTE_RESULT)
break;

rows++; if (!m_pTds->current_results)
continue;
for (int i = 0; i < m_pTds->current_results->num_cols; i++) {
col = m_pTds->current_results->columns[i];
if (col->column_cur_size < 0) {
continue;
}
ctype = tds_get_conversion_type(col->column_type, col->column_size);

src = &(m_pTds->current_results->current_row[col->column_offset]);
if (is_blob_type(col->column_type)){
src = (unsigned char *) ((TDSBLOB *) src)->textvalue;
}
srclen = col->column_cur_size;

if (tds_convert(m_pTds->tds_ctx, ctype, (TDS_CHAR *) src, srclen, SYBVARCHAR, &dres) < 0)
continue; delete(dres.c);
}
printf("(return status = %d)\n",resulttype);
}
break;
case TDS_STATUS_RESULT:
printf("(return status = %d)\n", m_pTds->ret_status);
break;
default:
printf("(return status = %d)\n",resulttype);
break;
}
}
}当我用具体的SQL语句传进去后,得到的resulttype 值始终是4052。不知道哪位大哥做过这方面的编程。