使用dbffcmd和dbrpcsend从c++调用SQL Server存储过程

Call SQL Server Stored Procedures from C++ with dbfcmd and dbrpcsend

本文关键字:调用 SQL Server 存储过程 c++ dbffcmd dbrpcsend 使用      更新时间:2023-10-16

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

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

    使用dbfcmd
  1. int ProcessMsg1(PDBPROCESS dbproc){
       dbfcmd(dbproc,"exec message1_proc '%s'",blk->msgtype);
       dbsqlexec(dbproc);
       if (dbretstatus(dbproc)==-1)
         printf("dbsqlexec failed.n");
    }
    
  2. 使用dbrpccinit, 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上找不到两种方法的比较。任何人都可以解释两种方法的区别,什么时候必须使用什么?

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

第二个使用了一个准备好的语句,即正确的方法。