C语言 如何读取火鸟数据库的查询结果大小



我正在做与火鸟数据库的C接口。我做了一些查询操作。我想知道如何读取结果大小?

下面是代码。我已经创建并插入了一些值到表中。我想读一下结果的大小。

#include <stdio.h>
#include "/Library/Frameworks/Firebird.framework/Versions/A/Headers/ibase.h"
static char *createTable="CREATE TABLE newex (Id int)"; //query for creating data table
static char *Insertvalues="INSERT INTO newex values (1)";//doing insertion into the   
//above created table
int SQLOpen(void)
{
    ISC_STATUS          status_vector[20];
    isc_tr_handle       transactionHandle = NULL; //transaction handle
    isc_db_handle       database = SQLGetDatabase();//database handle
    char                logInData [256], *dpb, *p;
    short               bufferLength;
    User_Credentials    credentials;
    sprintf(logInData, "%c%c%c%c%c%c%s%c%c%s",      isc_dpb_version1,
                                                    isc_dpb_num_buffers,
                                                    1,
                                                    90,
                                                    isc_dpb_user_name,
                                                    strlen("SYSDBA"),
                                                    "SYSDBA",
                                                    isc_dpb_password,
                                                    strlen("masterkey"),
                                                    "masterkey"); //passing user //credentials to connect to the database
    bufferLength = strlen(logInData);
    if (isc_attach_database(status_vector, strlen(DATABASE_PATH), DATABASE_PATH, &DatabaseHandle,bufferLength, logInData)) // connecting to database
    {
        SQLTestForErrors(status_vector);
        throw(ConnectionError, "");
    }
return 1;
}
char** SQLQuery(char *query, uint maxRows)
{
    isc_tr_handle   transactionHandle = NULL;
    isc_db_handle   database = SQLGetDatabase();
    short           bufferLength;
    char            dpb_buffer[256], *dpb, *p;
    ISC_STATUS      status_vector[20];

    isc_start_transaction(status_vector, &transactionHandle, 1, &database, 0, NULL);
    if (isc_dsql_execute_immediate(status_vector, &database, &transactionHandle, 0, query, 1, NULL)) //query operations 'create/insert'
    {
        SQLTestForErrors(status_vector);
        throw(QueryError, "");
    }
    isc_commit_transaction(status_vector, &transactionHandle);
   return testString;
}
int main()
{
    //struct Folder_table;
    e4c_using_context(E4C_TRUE)
    {
        SQLOpen();
        SQLQuery(createTable);
        SQLQuery(Insertvalues);
    }
}

你不能提前:结果集是物化的,而你正在读取行(使用isc_fetch):最终的行数是不知道的,直到你读了所有的行(此时你可以自己计算,或查询它与一个信息请求)。

然而,我注意到你试图使用isc_dsql_execute_immediate。您只能将isc_dsql_execute_immediate用于ddl和生成一行的查询(您需要为多行准备和执行)。

相关内容

  • 没有找到相关文章

最新更新