我试图通过Npgsql运行此查询,当我直接在服务器上运行时,此查询工作正常,因为我得到:查询成功返回15毫秒没有结果。但是,当我使用Npgsql时,我得到:42P01:关系" sometable"不存在
我知道错误是在INSERT语句中,我错过了什么?
连接字符串:Host = 192.168.137.47; Port = 5432; UserId = postgres; Password = test; Database = pg_database;
var m_createdb_cmd = new NpgsqlCommand();
m_createdb_cmd.Connection = _connPg;
m_createdb_cmd.CommandText = psSQL;
_connPg.Open();
m_createdb_cmd.ExecuteNonQuery();
_connPg.Close();
查询
BEGIN;
CREATE TABLE "sometable" (
"test" varchar(254));
INSERT INTO "sometable" ("test") VALUES ('Hello World');
COMMIT;
日志
2015-10-01 07:08:46 EDT ERROR:关系" sometable"字符13不存在 2015-10-01 07:08:46 EDT声明:INSERT INTO" sometable" ("测试")价值观(' Hello World')
p.s.:i'还看了PostgreSQL ERROR: 42P01: relation "[Table]" does not exist无效
答案 0 :(得分:3)
这是由于Npgsql 3.x中引入的已知限制 - 当在一个命令中发送多个SQL语句时,后面的语句不再依赖于在先前语句中创建的实体。例如,您无法创建表,然后在同一命令中插入表。解决方法是简单地将表创建和插入拆分为两个命令(请注意,这与事务无关。)
答案 1 :(得分:0)
创建表格。提交该交易。 然后在单独的事务中插入数据。