如何在MSVC中使用ECPG

时间:2011-07-15 18:45:28

标签: c++ c visual-c++ postgresql

我正在开发软件,我正试图弄清楚如何使用ecpg。我已经设法使用 MSVC 2010 构建 PostgreSQL 9.0.4 并成功构建了一个测试程序以确保其正常运行。 (http://www.linuxjournal.com/content/accessing-postgresql-cc,除了针对Windows进行了修改。)

然而,我不知道如何构建,在源代码中为#include包含什么,等等。我已经找到了很多语法示例,但没有采用测试程序或步行的方式。即使是之前版本(8.4.x)的内容也会有所帮助。

1 个答案:

答案 0 :(得分:2)

AFAIK首先需要嵌入式SQL C文件(扩展名为pgc)。简单的例子:

int main(void)
{
    EXEC SQL BEGIN DECLARE SECTION;
    int ordinaryInt;
    EXEC SQL END DECLARE SECTION;

    EXEC SQL CONNECT TO tcp:postgresql://localhost:5432/postgres AS myconnection USER postgres USING '12345';

    EXEC SQL INSERT INTO t (value) VALUES ('abcdefgj');
    EXEC SQL COMMIT;

    EXEC SQL DISCONNECT myconnection;

    return 0;
}

doc中解释了连接字符串。之后,您需要ecpg.exe,将上面的代码转换为众所周知的C代码:

  

在编译之前,您通过嵌入式SQL C运行该文件   预处理器,它将您习惯的SQL语句转换为特殊语句   函数调用。编译后,您必须链接到一个特殊的库   包含所需的功能。

例如:

"C:\Program Files (x86)\PostgreSQL\9.0\bin\ecpg.exe" -o ecpgTest.c ecpgTest.pgc

您生成的C代码如下所示:

/* Processed by ecpg (4.2.1) */
/* These include files are added by the preprocessor */
#include <ecpglib.h>
#include <ecpgerrno.h>
#include <sqlca.h>
/* End of automatic include section */

#line 1 "ecpgTest.pgc"
int main(void)
{
    /* exec sql begin declare section */


#line 4 "ecpgTest.pgc"
 int ordinaryInt ;
/* exec sql end declare section */
#line 5 "ecpgTest.pgc"


    { ECPGconnect(__LINE__, 0, "tcp:postgresql://localhost:5432/postgres" , "postgres" , "'12345'" , "myconnection", 0); }
#line 7 "ecpgTest.pgc"


    { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t ( value ) values ( 'abcdefgj' )", ECPGt_EOIT, ECPGt_EORT);}
#line 9 "ecpgTest.pgc"

    { ECPGtrans(__LINE__, NULL, "commit");}
#line 10 "ecpgTest.pgc"


    { ECPGdisconnect(__LINE__, "myconnection");}
#line 12 "ecpgTest.pgc"


    return 0;
}

在其他包含目录中添加C:\Program Files (x86)\PostgreSQL\9.0\include路径(配置属性→C / C ++)并将libecpg.lib添加到其他依赖项(链接器→输入)中,可能需要将C:\Program Files (x86)\PostgreSQL\9.0\lib路径添加到其他图书馆指令(链接器→常规),你准备好了(注意一些DLL位于C:\Program Files (x86)\PostgreSQL\9.0\bin)。

相关问题