C# 如何使用visual c从access mdb获取数据并将其放入postgresql表中?

C# 如何使用visual c从access mdb获取数据并将其放入postgresql表中?,c#,postgresql,ms-access,npgsql,C#,Postgresql,Ms Access,Npgsql,好的,我已经做了-我能够通过Microsoft.Jet.OLEDB provider连接到访问mdb表,然后我可以使用select查询、OleDbDataAdapter和数据集从表中获取数据 现在,我可以通过Npgsql连接到Postgresql,但我想不通的是,我如何从access表中获取数据并将其放入Postgresql表中 我想要完成的是从access mdb表中获取数据,并使用select into查询将其插入postgresql表。我认为在这种情况下,您无法使用select into查

好的,我已经做了-我能够通过Microsoft.Jet.OLEDB provider连接到访问mdb表,然后我可以使用select查询、OleDbDataAdapter和数据集从表中获取数据

现在,我可以通过Npgsql连接到Postgresql,但我想不通的是,我如何从access表中获取数据并将其放入Postgresql表中


我想要完成的是从access mdb表中获取数据,并使用select into查询将其插入postgresql表。

我认为在这种情况下,您无法使用select into查询从一个数据库到另一个数据库,因为这两个数据库位于不同的引擎上。您需要做的是将数据从MDB存储到某个CLR对象中,然后将CLR数据读取到PostgreSQL数据库中,这相当简单。只是不可能按您想要的方式执行

我认为在本例中,您无法使用从一个数据库到另一个数据库的SELECT INTO查询,因为这两个数据库位于不同的引擎上。您需要做的是将数据从MDB存储到某个CLR对象中,然后将CLR数据读取到PostgreSQL数据库中,这相当简单。只是不可能按照你想要的方式来做

以下是一些非常业余的笔记,可能会对你有所帮助。它们指的是SQL Server Express,因为我没有访问postgressql的权限。我通过链接SQL server表以访问并检查连接属性获得连接字符串,但是,您也可以在此处查看:。这两行将Access中表1中的值插入SQL Express中的表2。在Access中,如果在这种情况下Access 2010不正确,查询将在没有警告的情况下失败。我在Visual c 2010 Express中尝试过这个

//create the database connection
OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\docs\\db.mdb");

//create the command object and store the sql query
OleDbCommand aCommand = new OleDbCommand("INSERT into [ODBC;Description=TEST;DRIVER=SQL Server;SERVER=COMP\\SQLEXPRESS;Trusted_Connection=Yes;DATABASE=test].Table2 (id, atext) select id, atext from table1", aConnection);

以下是一些非常业余的笔记,可能会对你有所帮助。它们指的是SQL Server Express,因为我没有访问postgressql的权限。我通过链接SQL server表以访问并检查连接属性获得连接字符串,但是,您也可以在此处查看:。这两行将Access中表1中的值插入SQL Express中的表2。在Access中,如果在这种情况下Access 2010不正确,查询将在没有警告的情况下失败。我在Visual c 2010 Express中尝试过这个

//create the database connection
OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\docs\\db.mdb");

//create the command object and store the sql query
OleDbCommand aCommand = new OleDbCommand("INSERT into [ODBC;Description=TEST;DRIVER=SQL Server;SERVER=COMP\\SQLEXPRESS;Trusted_Connection=Yes;DATABASE=test].Table2 (id, atext) select id, atext from table1", aConnection);

嘿,多亏了所有帮助我的人,我终于明白了。 因此,对于所有将遇到相同情况的人,下面是一个解决方案,其中包含一个正确的Postgresql连接字符串:

//create the database connection
OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\docs\\db.mdb");

//create the command object and store the sql query
OleDbCommand aCommand = new OleDbCommand("INSERT into [ODBC;DSN=PostgreSQL;DATABASE=postgres;SERVER=localhost;PORT=5432;UID=postgres;PWD=test;].Table2 (id, atext) select id, atext from table1", aConnection);

嘿,多亏了所有帮助我的人,我终于明白了。 因此,对于所有将遇到相同情况的人,下面是一个解决方案,其中包含一个正确的Postgresql连接字符串:

//create the database connection
OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\docs\\db.mdb");

//create the command object and store the sql query
OleDbCommand aCommand = new OleDbCommand("INSERT into [ODBC;DSN=PostgreSQL;DATABASE=postgres;SERVER=localhost;PORT=5432;UID=postgres;PWD=test;].Table2 (id, atext) select id, atext from table1", aConnection);

你能给我一些关于CLR对象的建议吗?理论上,我知道我需要使用一些中介来存储access表中的数据,然后将这些数据放入postgresql表中。但是我不知道如何创建它。@MindLezz:创建一个类,该类对表中的每一列都有一个属性。每一行都是一个对象。您可以使用诸如NHibernate、LINQ to SQL或实体框架之类的ORM将表映射到对象;你能给我一些关于CLR对象的建议吗?理论上,我知道我需要使用一些中介来存储access表中的数据,然后将这些数据放入postgresql表中。但是我不知道如何创建它。@MindLezz:创建一个类,该类对表中的每一列都有一个属性。每一行都是一个对象。您可以使用诸如NHibernate、LINQ to SQL或实体框架之类的ORM将表映射到对象;我对postgressql一无所知,但有了Access和MySQL,你可以使用ODBC,这对你有用吗?@Remou:嗯,这是一个不错的解决方案,但据我所知,它在Access数据库下运行。我想要的是一个用visual c编写的外部程序,它将从access表中获取数据,然后将其放入postgresql表中,而不使用MSAccess本身。也许我可以在access和postgresql中使用ODBC?是的,这应该是可能的,链接只是作为引用两个不同数据库的示例。我也许能找到一些cI的注释,但我对postgressql一无所知,但有了Access和MySQL,你可以使用ODBC,这对你有用吗?@Remou:嗯,这是一个不错的解决方案,但据我所知,它在Access数据库下运行。我想要的是一个用visual c编写的外部程序,它将从access表中获取数据,然后将其放入postgresql表中,而不使用MSAccess本身。也许我可以在access和postgresql中使用ODBC?是的,这应该是可能的,链接只是作为引用两个不同数据库的示例。我也许能找到一些c的注释