DB:SQL Server 2000
開発:VC++ 6.0(Visual Studio 6.0)
ODBC経由でデータベースのストアドプロシージャを呼び出しています。
呼び出しの際は、リターンコード、出力パラメータ、入力パラメータを
SQLBindParameterでバインドして扱っていますが、
出力パラメータの値、しかも値が文字列SQL_VARCHARの場合のみ
値がうまく受け取れません。
仮に{? = call XXXX(?,?)}で、
リターンコード、出力パラメータ、入力パラメータの順番で
長さが5だとします。
-------------------------------------------------------------
LPTSTR value = new TCHAR[5+1];
value = あいうえお+'\0';
..略...
SQLBindParameter(hstmt,2,SQL_PARAM_OUTPUT,SQL_C_CHAR,
SQL_VARCHAR,5,0,(void*)value,0,SQL_NTS);
..略...
-------------------------------------------------------------
ストアド呼び出し(ストアド内で出力パラメータにかきくけこを設定)の後も
値はあいうえおのままなのです。エラーも発生しません。
出力パラメータが数字SQL_INTEGERの場合は、値もストアド内で設定した値が
返ってきます。
VC++初心者です。プログラムの書き方が間違っているのでしょうか?
何かご存知のことや、お気付きの点があったら教えて下さい。
> value = あいうえお+'\0';
ここは
lstrcpy( value, あいうえお );
では?
nさんありがとうございます。
ただまだうまくいかず、結局SQLBindParameterの後ろから2番目の
引数に問題がありました。
この引数は、出力パラメータの場合返すバイト数を切捨てるための
数値だったみたいで、255と数値を上げたらうまくいきました。
SQLBindParameter(hstmt,2,SQL_PARAM_OUTPUT,SQL_C_CHAR,
SQL_VARCHAR,5,0,(void*)value,0,SQL_NTS);
↓
SQLBindParameter(hstmt,2,SQL_PARAM_OUTPUT,SQL_C_CHAR,
SQL_VARCHAR,5,0,(void*)value,255,SQL_NTS);