我正在寻求在C中打印SQL语句结果的帮助。我尽量不将每个变量设置为指针,然后使用该指针打印变量。如果我这样做了,我会有几百个变量。这就是我迄今为止所尝试的。我真的不知道如何正确地输出。如有任何帮助,我们将不胜感激。
int hstmt = DBActivateSQL(hdbc, "SELECT * FROM REG_RESULTSTABLE");
if (hstmt <= 0)
{
ShowError();
}
sprintf(uutNum, "%s n", hstmt);
while((resCode = DBFetchNext(hstmt)) == DB_SUCCESS) {
SetCtrlVal(panelHandle, PANEL_lstregulator, uutNum);
}
DBActivateSQL
的原型是
int DBActivateSQL (int connectionHandle, char SQLStatement[]);
返回int
。
因此,hstmt
应声明为int
类型。
int hstmt = DBActivateSQL(hdbc, "SELECT * FROM REG_RESULTSTABLE");
要将其打印为字符串,您需要使用%d
而不是%s
,因为hsmt
属于int
类型。
sprintf(uutNum, "%d",hstmt);
^^------------------------//Using %d instead of %s here
您想要的函数是DBFetchNext
和DBGetCol*
(DBGetColChar
、DBGetColDouble
…(。根据DBGetColChar
上的文档页面,流应该是这样的,每列只需要一个变量:
void print_MyTable(int hdbc)
{
char *var1;
int var2;
float var3;
int statement = DBActivateSQL(hdbc, "SELECT col1, col2, col3 FROM MyTable");
int resultCode;
while ((resultCode = DBFetchNext(statement)) == DB_SUCCESS) {
if ((resultCode = DBGetColChar(statement, 1, &var1, "")) != DB_SUCCESS) {
// Handle the error
break;
}
if ((resultCode = DBGetColInt(statement, 2, &var2)) != DB_SUCCESS) {
// Handle the error
DBFree(var1);
break;
}
if ((resultCode = DBGetColFloat(statement, 3, &var3)) != DB_SUCCESS) {
// Handle the error
DBFree(var1);
break;
}
// Print the values
printf("col1: %s, col2: %d, col3: %fn", var1, var2, var3);
// Free the string's memory
DBFree(var1);
}
statement = DBDeactivateSQL(statement);
}