我有这样的程序,从"C“OK工作。如果它们不存在,则创建一个表。
PGresult *result;
conn = PG_connect();
if (conn)
{
if (!PG_begin(conn))
{
char strtable[512] = {0};
sprintf(strtable, "%s", "CREATE TABLE IF NOT EXISTS mytable");
strcat(strtable, " (setting TEXT, value TEXT, rez1 TEXT, rez2 TEXT)");
result = PQexec(conn, strtable);
if (PQresultStatus(result) != PGRES_COMMAND_OK)
{
printf("CREATE TABLE failed: %s\n", PQerrorMessage(conn));
PQclear(result);
exit_nicely(conn);
}
PQclear(result);
PG_end(conn);
}
}
PQfinish(conn);这意味着我是正确连接的。
但是为什么(究竟)在相同的代码和情况下,这个查询不能工作呢?
sprintf(strtable, "%s%s", "SELECT 1 FROM pg_tables WHERE tablename=", "\'invli\'");我总是得到PQresultStatus(结果)=2和PQerrorMessage(conn),没有任何文本!
我在npgsql中使用的所有代码都没有问题。另外一个问题是,如何从这样的简单查询或只有一条信息的“计数”中获得最好的结果?在npgsql中,我使用了"ExecuteScalar“函数。
发布于 2013-06-02 21:08:07
根据PostgreSQL头文件,状态码2是PGRES_TUPLES_OK,这意味着“后端正确执行了返回元组的查询命令,PGresult包含结果元组”。所以这里没有错误。相反,为SELECT查询返回PGRES_COMMAND_OK会很奇怪。
另请参阅文档中的状态代码(http://www.postgresql.org/docs/current/static/libpq-exec.html):
PGRES_COMMAND_OK成功完成未返回任何数据的命令。
PGRES_TUPLES_OK成功完成返回数据的命令(如SELECT或SHOW)。
https://stackoverflow.com/questions/16882992
复制相似问题