2012-02-07 7 views
0

私は次のようにODBC経由でSQL Serverから数値/小数点/お金の列を読み取ろう:SQL Serverからnumeric/decimal/money列を読み取る方法は?

SQL_NUMERIC_STRUCT decimal; 
SQLGetData(hSqlStmt, iCol, SQL_C_NUMERIC, &decimal, sizeof(decimal), &indicator); 

すべてのこれらのタイプは、SQL_NUMERIC_STRUCT構造体として返され、私はのSQLGetData()APIにSQL_C_NUMERIC種類を指定しています。

データベースでは、列は、たとえばdecimal(18, 4)、またはmoneyと定義されています。しかし、問題は、返されたデータは常にdecimal.precisionが38(最大可能)に設定され、decimal.scaleは常にゼロに設定されていることです。したがって、実際に格納されている数値が12.65の場合、SQL_NUMERIC_STRUCT構造体の戻り値はになります。したがって、非常に奇妙な理由により、小数部分は単に破棄されます。

どうしたらいいですか?

答えて

0

OK、this articleで問題が説明されています。その解決策は非常に面倒なので、this postの影響を受けて、SQL_NUMERIC_STRUCTの使用を避けることにしました。今度はSQL_C_WCHARSQL_C_CHARも同様です)を指定し、numeric/decimal/money列をテキスト文字列として直接読み込みます。ドライバが変換を行うように見えます。

関連する問題