如何在MSVC中使用ECPG
How to use ECPG in MSVC
我正处于一个软件的早期开发阶段,我正试图弄清楚如何使用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
)。
相关文章:
- MSVC多行宏编译器错误
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- MSVC是否支持C++11样式的属性而不是__declspec
- MSVC将仅移动结构参数解释为指针
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 有与__builtin__FUNCTION()等效的MSVC吗
- 为什么 gcc 编译这个而 msvc 没有
- 看起来is_nothrow_constructible_v()在MSVC中被破坏了,我错了吗
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- MSVC 忽略 [[maybe_unused]] 的功能?
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- MSVC中的宏观扩展问题
- "Ill-defined for-loop - loop executes infinitely" (MSVC C6295)
- __CHAR_BIT__宏是否为 MSVC 编译器预定义?
- 不正确的操作数类型 MSVC
- 使用 MSVC 调试类型
- CRTP 中的复制赋值运算符 - gcc vs clang 和 msvc
- MSVC(Visual C++)是否有等效的-weffc ++?
- 命名空间范围内的外部 - GCC vs clang vs msvc
- 如何在MSVC中使用ECPG