- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC++でSQLServerにUpdateした際の更新件数)
VC++でSQLServerにUpdateした際の更新件数
このQ&Aのポイント
- Updateした時の更新件数は取得できないでしょうか。
- ★1の場合:更新はするけど、件数は取得出来ない。 ★2は_CommandのExecuteメソッドサンプルに件数取得方法が載っていたのですが、落ちる(catchされる) 何か良い方法ご存知の方教えて下さい。
- _ConnectionPtr pConn; //Connectionオブジェクト _CommandPtr pCmd; // Commandオブジェクト _variant_t vtNull; //variant_t型NULL tagVARIANT *tUp; //更新件数を取得? try { pConn.CreateInstance(__uuidof(Connection)); pCmd.CreateInstance(__uuidof(Command)); //DB接続 pConn->CursorLocation = adUseClient; _bstr_t strConn("Provider=sqloledb;Data Source=127.0.0.1;Initial Catalog=TESTDB;User Id=testID;Password=Pass;"); pConn->Open(strConn, "", "", adConnectUnspecified); vtNull.vt = VT_ERROR; vtNull.scode = DISP_E_PARAMNOTFOUND; int lRow=0; tagVARIANT *tUp; // 更新処理 pCmd->ActiveConnection = pConn; pCmd->CommandText = "UPDATE T_TABLE SET NUM='123' where ID=TTD"; ★1 pRs = pCmd->Execute(NULL, NULL, adCmdText ); ★2 pRs = pCmd->Execute(tUp, NULL, adCmdText ); catch (_com_raise_error &p) { //エラー処理 } pConn->Close(); //Connectionオブジェクト return 0;
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
どのように初期化しましたか? おそらく初期化がうまくいっていないか、値の取得が正しくないのだと思います。 次のコードを参考にしてみてください。 VARIANT recordsAffected; VariantInit( &recordsAffected ); pCommand->Execute(&recordsAffected, NULL, ADODB::adCmdText ); std::cout << recordsAffected.lVal; VariantClear(&recordsAffected); 処理時間的にはちょっと不利になると思いますが、select countでもいいかもしれません。
その他の回答 (1)
- passepied
- ベストアンサー率50% (18/36)
回答No.1
tUpを初期化しましょう。
質問者
補足
有難う御座います。 tUpの初期化したら落ちなくなりましたが、 やはり件数は取得出来ない状態です。 もう少し回答待ってみてダメなら 更新後、同じwhere句でSelect count(*)するかも知れません。
お礼
わーい!! 出来ました。 初期化の仕方が間違っていたから取得できなかったようです。 有難う御座います。