在我調用SQLGetData
函數之前,我想知道表中可用數據的確切大小。目前我遵循下面列出的代碼,這對我很有用,但我不確定它是否安全。如何在調用SQLGetData之前知道數據的大小
任何人都可以幫助我嗎?
char*ptr = new char[0];
if (retcode = SQLGetData(hstmt, 31, SQL_C_BINARY, ptr,0,&cbfdata) != SQL_NO_DATA)
{
delete[] ptr;
vector<char> vec(cbfdata);
SQLGetData(hstmt, 31, SQL_C_BINARY, &vec[0],cbfdata,&cbfdata);
ofstream fout;
fout.open(file,ios::binary);
fout.write(&vec[0],cbfdata);
fout.close();
vec.clear();
}
除了分配一個長度爲1的數組,您可以使用堆棧,如:'char c;如果(retcode = SQLGetData(hstmt,31,SQL_C_BINARY,&c,0,&cbfdata)!= SQN_NO_DATA)...' –
請注意,這隻適用於SQL_C_BINARY數據或者當沒有任何字符集轉換暗示,否則cbfdata可能會收到SQL_NO_TOTAL(請參閱[this SQLGetData page](https://docs.microsoft.com/en-us/sql/relational-databases/native-client-odbc-api/sqlgetdata))。在這種情況下,您會遇到一個循環,它會在不知道總長度的情況下檢索數據塊。 –