0

リモート SQL Server 2005 db からストアド プロシージャを呼び出して、C++ で記述されたアプリケーションを読んでいます。

リモート SP 呼び出しを行うために 2 つの異なる方法を使用していることがわかりました。

  1. dbfcmd を使用する

    int ProcessMsg1(PDBPROCESS dbproc){
       dbfcmd(dbproc,"exec message1_proc '%s'",blk->msgtype);
       dbsqlexec(dbproc);
       if (dbretstatus(dbproc)==-1)
         printf("dbsqlexec failed.\n");
    }
    
  2. dbrpcinit、dbrpcparam、dbrpcsend を使用する

    int ProcessMsg2(PDBPROCESS dbproc){
       dbrpcinit(dbproc, "message2_proc", (DBSMALLINT)0);
       dbrpcparam(dbproc, "@MType", 0, SQLCHAR, 4, 4, blk->msgtype);
       if ((dbrpcsend(dbproc) == FAIL))
         printf("dbrpcsend failed.\n");
    }
    

Google の 2 つの方法の比較は見つかりませんでした。誰でも2つの方法の違いを説明できますか?いつ何を使用する必要がありますか?

4

1 に答える 1

0

1 つ目は、文字列連結、 SQL インジェクション災害のレシピ、プラン キャッシュの肥大化、過剰なサーバー側解析などを使用していますが、この場合はストアド プロシージャが呼び出されるため、これらの影響は軽減されます。

2 番目のものはPrepared Statementを使用します。つまり、それを行う正しい方法です。

于 2013-04-10T08:53:10.097 に答える