libpq-fe.h和c程序关闭

我在Postgresql上与localhost数据库连接的C程序遇到了问题。代码类似于以下内容:
#include <stdio.h>
#include <libpq-fe.h>

int main() {

int dane;
PGconn *dbh; // definujemy uchwyt do bazy – jest to specjalna zmienna pamiętająca
PGresult *wynik ; //wskaźnik do struktury przechowującej wynik zapytania 

dbh = PQconnectdb(\"dbname=lab1 user=postgres\");
// teraz sprawdźmy statud połączenia:
if (PQstatus(dbh) == CONNECTION_OK)
{

  printf(\"Jest polaczenie z baza \\n\");
// tu będziemy wpisywali całą obsluge bazy danych
wynik = PQexec(dbh,\"INSERT INTO osoba(imie,nazw) VALUES(\'Jan\',\'Kowalski\')\");
// wyswietlmy status z serwera
//printf(„%s\\n”,PQresStatus(wynik));

switch(PQresultStatus(wynik))
{
    case PGRES_TUPLES_OK:
    // jeśli zapytanie zwroci dane to tutaj je sprawdzimy
    break;
    case PGRES_COMMAND_OK:
    // nie ma danych
    printf(\"Zapytanie sie powiodlo \\n\");
    break;
    case PGRES_EMPTY_QUERY:
    printf (\"Serwer nie mial nic do roboty , moze blad ?\\n\");
    break;
    case PGRES_NONFATAL_ERROR:
    printf(\"Blad niekrytyczny, sprobuj ponowic zapytanie\\n\");
    break;
    case PGRES_FATAL_ERROR:
    default:
    printf(\"Blad krytyczny \\n\");
    // wyswietlmy status bledu
    printf(\"%s\\n\",PQresultErrorMessage(wynik));
}

// wyczyscmy wynik o ile jest
PQclear(wynik);
// teraz rozłączmy sie z bazą
PQfinish(dbh);

} else { printf(\"No connection..\\n\"); }

getch();
return 0;

}
当我运行该程序时,它会自动关闭,没有任何提示。我无法用任何东西来阻止它,例如getch(),getchar()或system(\“ PAUSE \”)。当我删除以上所有变量时,声明程序运行正常。怎么了     
已邀请:
        所需的DLL \都位于postgresql安装的bin文件夹中。通常是c:\\ program files \\ postgresql \\ 9.0 \\ bin 这些DLL \必须位于搜索路径或与可执行文件相同的文件夹中。相关的DLL是:COMERR32.DLL,GSSAPI32.DLL,K5SPRT32.DLL,KRB5​​_32.DLL,LIBEAY32.DLL,LIBICONV2.DLL,LIBINTL3.DLL,LIBPQ.DLL和SSLEAY32.DLL。     
        我建议使用调试器逐步执行代码。 如果失败,请使用适当的打印语句加载它。例如:
int main()
{
    PGconn *dbh = PQconnectdb(\"dbname=lab1 user=postgres\");
    fputs(\"After PQconnectdb()\\n\", stderr);
    int status = PQstatus(dbh);  // C99
    fputs(\"After PQstatus()\\n\");
    if (status == CONNECTION_OK)
    {
        PGresult *wynik = PQexec(dbh,\"INSERT INTO osoba(imie,nazw) VALUES(\'Jan\',\'Kowalski\')\");
        fputs(\"After PQexec()\\n\", stderr);
        ...
    }
    ...
}
使用
fputs()
stderr
通常可以确保不对消息进行缓冲,因此即使程序崩溃也可以看到它们。写to4ѭ并非总是如此。 我假设
PQstatus()
返回一个整数,因为这些值在
switch
语句中使用。     

要回复问题请先登录注册