我在本地运行Oracle 11g2 32b,并且我在代码中连接它。我使用VC ++并连接OLE DB。连接工作正常(最后),我可以毫无问题地将数据插入到我的表中。
然而,我遇到问题的方法是获取数据。我有一个名为ITEM的表来测试我的东西。我使用CCommand。该命令执行,我的命令实际上包含数据。实际上,它包含正确数量的列和行;但是,它似乎没有包含正确的数据。
当我运行这个时,我应该得到7行编号为4到10,而我却逐渐接收到增加和远离值在83,000 000到168 000 000之间。当我尝试获取列名时我也得到数字而不是字符串。
stringstream stream;
string str;
stream << "SELECT * FROM ITEM";
str = stream.str();
wstring commandText = s2ws(str);
hr = cmd.Open(session, commandText.c_str());
if(FAILED(hr)){
cout << "Select failed." << endl;
//Cropped for brevity, closes connection and returns -1
}else{
cout << "Selection successful." << endl;
hr = cmd.MoveFirst();
int counter = 0;
while(!FAILED(hr) && hr != DB_S_ENDOFROWSET){
counter++;
hr = cmd.MoveNext();
cout << *(long*)(cmd.GetValue(1)) << endl;
}
cout << "Number of entries : " << counter << endl;
}
我首先虽然它可能是数据类型问题(我的列在Oracle中的数据类型是INTEGER),所以我尝试了不同类型而不是“long”,但无济于事。
提前致谢。
编辑:我能够在另一个测试表上检索VARCHAR,但我仍然在努力学习数字。编辑:进一步测试表明,4种不同的数字DBTYPE都读取了不同的数字。
编辑:我能够将数字作为字符串读取,并在我的代码中将它们转换回int。这完全是荒谬的,但它确实有效。如果有人想出来的话,我仍然想知道这样做的正确方法,但在那之前,这将是必须做的。