2013-04-10 161 views
0

我正在阅读使用C++编写的应用程序,从远程sql server 2005 db调用存储过程。使用dbfcmd和dbrpcsend从C++调用SQL Server存储过程

我发现它使用两种不同的方法来进行远程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"); 
    } 
    

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

回答

0

第一个是使用字符串连接,SQL Injection灾难的配方,计划缓存膨胀,过度的服务器端解析等,尽管在调用存储过程的情况下,这些影响减少了。

第二个使用Prepared Statement,即正确的方式来做到这一点。

+0

我以为他们的差异与“RPC”或远程有关,因为第二种方法在其名称中提到了rpc。所以无论调用的数据库是远程还是本地的,它们都可以互换? – JiuDong 2013-04-10 09:12:29

+0

它们可以互换。 – muhmud 2013-04-10 09:26:26

+0

谢谢,这清除了我的疑惑 – JiuDong 2013-04-10 13:34:56

相关问题