ODBC経由でのストアド呼び出し – プログラミング – Home

ODBC経由でのストアド呼び出し
 
通知
すべてクリア

[解決済] ODBC経由でのストアド呼び出し


ひまわり
 ひまわり
(@ひまわり)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

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++初心者です。プログラムの書き方が間違っているのでしょうか?
何かご存知のことや、お気付きの点があったら教えて下さい。


引用未解決
トピックタグ
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

> value = あいうえお+'\0';

ここは

lstrcpy( value, あいうえお );

では?


返信引用
ひまわり
 ひまわり
(@ひまわり)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

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);


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました