Oracle 11g2 32bをローカルで実行しており、コードに接続しています。 VC++を使用し、OLE DBに接続します。接続は正常に動作しています(最終的に)、問題なくテーブルにデータを挿入できます。OLEDB select文で間違った値を取得しています
ただし、私が問題に遭遇するのは、データを取得するときです。私はちょうど私のものをテストするためにITEMと呼ばれる単一のテーブルがあります。私はCCommandを使用します。コマンドが実行され、myコマンドに実際にデータが含まれています。実際には、正しい量の列と行が含まれています。ただし、正しいデータが含まれていないようです。
これを実行すると、7から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である)ので、私が代わりに「長い」のが、無駄にさまざまな種類を試してみました。
ありがとうございます。
EDIT:別のテストテーブルでVARCHARを取得することはできましたが、まだ数値で苦労しています。
EDIT:さらにテストすると、4つの異なる数値DBTYPEがすべて異なる不正な数値を読み取ることがわかりました。
EDIT:数字を文字列として読み込み、コード内でintに変換することができました。これは完全にばかげていますが、機能します。私はまだ誰かが何かを見出した場合、それを行う正しい方法を知りたいですが、それまではこれが必要です。
OleDbプロバイダのOracleクライアントプロバイダを使用して試したことがありますか? – DRapp
ここに 'descr your_table'を投稿してください。あなたのコードでは、数値をlong(long *の内容まで)にキャストしますが、この数値はどのようにデータベースに格納されますか? 'typeof(cmd.GetValue(1)) 'とは何ですか?あなたはなぜ直接には行かないのですか?cmd.GetValue(1): 'cout << * cmd.GetValue(1)' – danihp