Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 远程插入和更新数据库?_Database_Vb.net_Postgresql - Fatal编程技术网

Database 远程插入和更新数据库?

Database 远程插入和更新数据库?,database,vb.net,postgresql,Database,Vb.net,Postgresql,我的工作环境(基于库存的软件)是一个总部(H.O)和4个分支机构。这5个应用程序(包括H.O)在每个应用程序中都有相同的数据库 5个数据库中的所有表和所有内容都相同,即相同的5个数据库。目前,产品、参与方等仅在H.O中创建,这些项目(无论是参与方还是产品)将通过电子邮件作为XML传输到所有4家分支机构,以便他们可以导入XML(请注意,例如,我们为所有5个数据库中的所有表管理相同的id,即如果产品id在H.O中为4005,则所有分支机构中的id都应相同) 我想要的是,我需要更新或插入,而无需使用X

我的工作环境(
基于库存的软件
)是一个
总部(H.O)
和4个
分支机构
。这5个应用程序(包括
H.O
)在每个应用程序中都有相同的数据库

5个数据库中的所有表和所有内容都相同,即相同的5个数据库。目前,产品、参与方等仅在H.O中创建,这些项目(无论是参与方还是产品)将通过电子邮件作为
XML
传输到所有4家分支机构,以便他们可以导入
XML
(请注意,例如,我们为所有5个数据库中的所有表管理相同的id,即如果
产品id
H.O
中为
4005
,则所有分支机构中的id都应相同)

我想要的是,我需要更新或插入,而无需使用
XML
通过电子邮件或任何其他简单方法或集中式数据库方法发送(即一个数据库用于所有应用程序)


数据库位于
PostgreSQL

中,类似于下面几行的内容应该可以工作:

SELECT dblink_connect('hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd');
--根据您的喜好更改连接字符串

SELECT dblink_exec('INSERT INTO test (some_text) VALUES (''Text go here'');');
其中test是远程数据库中具有以下定义的表:

CREATE TABLE test(
    id serial
    , some_text text
);
在运行dblink_exec()之后,可以在远程数据库中检查结果(或者在本地使用dblink(),如下面的示例所示)

您还可以将dblink_exec调用包装到函数中:

CREATE OR REPLACE FUNCTION f_dblink_test_update(val text, id integer) RETURNS text AS
$body$
SELECT dblink_exec('UPDATE torles.test SET some_text=' || quote_literal($1) || ' WHERE id = ' || $2);
$body$
LANGUAGE sql;
如您所见,您甚至可以动态构建查询字符串(我并不提倡这种方法,因为您必须小心,不要以这种方式将SQL注入漏洞引入系统)


由于dblink_exec返回一条关于其操作的文本消息,因此必须将函数定义为返回文本,除非在dblink_exec调用后有其他值返回语句。

我是否应该为此创建一个函数??在您的情况下,什么是dblink_connect??dblink_connect()建立到远程PostgreSQL数据库的连接。我无法加载dblink。当我通过谷歌搜索得到此dblink时,它位于PostgreSQL安装的share/contribs/dblink.sql中。若要使用它,请将dblink.sql文件加载到您想在其中使用它的数据库中。但我的目录中没有任何内容。它应该在9.1 am中作为扩展捆绑使用Postgresql9.3.3因此,使用postgresql9.1或更高版本,可以简化附加模块的安装。注册扩展(包括dblink)可以通过以下方式安装:“创建扩展dblink;”
CREATE OR REPLACE FUNCTION f_dblink_test_update(val text, id integer) RETURNS text AS
$body$
SELECT dblink_exec('UPDATE torles.test SET some_text=' || quote_literal($1) || ' WHERE id = ' || $2);
$body$
LANGUAGE sql;