0

我正在阅读一个用 C++ 编写的应用程序,从远程 sql server 2005 db 调用存储过程。

我发现它使用两种不同的方法进行远程 SP 调用。

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

我找不到谷歌的两种方法的比较。任何人都可以解释两种方法的区别以及何时必须使用什么?

4

1 回答 1

0

第一个是使用字符串连接,这是SQL 注入灾难、计划缓存膨胀、过多的服务器端解析等的秘诀,尽管在这种情况下,当调用存储过程时,这些影响会降低。

第二个使用Prepared Statement,即正确的方法。

于 2013-04-10T08:53:10.097 回答