如何在MSVC中使用ECPG

How to use ECPG in MSVC

本文关键字:ECPG MSVC      更新时间:2023-10-16

我正处于一个软件的早期开发阶段,我正试图弄清楚如何使用ecpg。我已经设法使用MSVC 2010构建了PostgreSQL 9.0.4,并成功地构建了一个测试程序以确保它的工作。(http://www.linuxjournal.com/content/accessing-postgresql-cc, Windows版本除外)

但是我不知道如何构建,在源代码中"#include"什么,等等。我找到了很多语法示例,但没有测试程序或演练的方式。即使是以前的版本(8.4.x)也会有所帮助。

首先您需要嵌入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;
}

连接字符串在文档中有很好的解释。之后,你需要ecpg.exe,把上面的代码转换成众所周知的C代码:

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

例如:

"C:Program Files (x86)PostgreSQL9.0binecpg.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)PostgreSQL9.0include路径在额外的包括目录(配置属性→C/c++),并把libecpg.lib到额外的依赖(链接器→输入)可能你需要添加C:Program Files (x86)PostgreSQL9.0lib路径到额外的库目录(链接器→一般),你准备好了(注意,一些dll位于C:Program Files (x86)PostgreSQL9.0bin)。