2012-01-11 14 views
0

私は、OLEDBを使用してVC++のローカルOracle 11gR2データベースに接続しています。 CCommand :: Openを使用してデータベースから文字列を含む行を選択しています。Select文と暗黙の変換は、文字列の最初の文字のみを返します。

私のデータを取得するためにGetValueを使用しているとき、私は最初の文字だけを取得します。 ここにそのデータを取得しようとしています。 "GetValue"と "GetColumnName"で同じ動作が発生することに注意してください。

char* test = (CHAR*)cmd.GetColumnName(2); 
cout << (CHAR*)cmd.GetColumnName(2) << endl; 
printf_s("%s", (CHAR*)cmd.GetColumnName(2)); 
printf_s("%S", (CHAR*)cmd.GetColumnName(2)); //This one works, 
     //but I really need to store my data, not just print it. 

私はこれはC++のデータ型へのSQLからの変換の問題がされて考えていますが、私はそれに私の指を置くことはできません。助けて?

+0

'GetColumnName'の戻り値の型は何ですか? –

+0

戻り値の型はLPOLESTRです。 – Paradoxyde

答えて

3

LPOLESTRは、unsigned short*であるwchar_t*文字列(それを確認するためのLRiOありがとう)です。最初の文字を取得するのは、それぞれの文字が2バイトを占め、英語の文字がNULLバイトに続いて、その文字のASCIIコードになるためです。リトルエンディアン形式で格納されている場合、 1文字のC文字列(バイトが後方に格納されているため)。

あなたはそれを印刷するwcoutを使用する必要があります。

wcout << cmd.GetColumnName(2); 

あなたは(wcslenを経由してその長さと一緒に)このようにそれを保存することができます:

LPOLESTR ostr = cmd.GetColumnName(2); 
size_t ostrlen = wcslen(ostr); 
+0

[実際](http://msdn.microsoft.com/en-us/library/cc237791%28v=prot.13%29.aspx)。 –

関連する問題