【问题标题】:how to get data from access mdb and put it into postgresql table, using visual c#?如何使用 Visual c# 从访问 mdb 获取数据并将其放入 postgresql 表中?
【发布时间】:2012-01-11 23:39:48
【问题描述】:

好吧,我已经完成了 - 我能够通过 Microsoft.Jet.OLEDB 提供程序连接到访问 mdb 表,然后我可以使用选择查询、OleDbDataAdapter 和 DataSet 从表中获取数据。

现在,我可以通过 Npgsql 连接到 Postgresql,但是让我无法理解的是 - 我如何能够从访问表中获取数据并将其放入 postgresql 表中?

我想要完成的 - 是从访问 mdb 表中获取数据并使用“select into”查询将其插入到 postgresql 表中。

【问题讨论】:

  • 我对postgressql一无所知,但是有了Access和MySQL,你可以使用ODBC,这对你有用吗stackoverflow.com/questions/442915/…
  • @Remou:嗯,这是一个很好的解决方案,但据我所知 - 它在 access 数据库下运行。我想要的是一个外部程序,用 Visual c# 编写,它将从访问表中获取数据,然后将其放入 postgresql 表中,而不使用 MSAccess 本身。也许我可以通过 access 和 postgresql 以某种方式使用 ODBC?
  • 是的,这应该是可能的,该链接仅用作引用两个不同数据库的示例。我也许能找到一些 c# 的注释

标签: c# postgresql ms-access npgsql


【解决方案1】:

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

【讨论】:

  • 你能给我一些关于CLR对象的建议吗?好吧,理论上,我知道我需要使用一些中介来存储访问表中的数据,然后将这些数据放入 postgresql 表中。但我不知道如何制作它。
  • @MindLezz:创建一个类,该类对表中的每一列都有一个属性。每行都是一个对象。您可以使用诸如 NHibernate、LINQ to SQL 或实体框架之类的 ORM 将您的表映射到对象。
  • 谢谢,我试试看;)
【解决方案2】:

这里有一些非常业余的笔记可能会对您有所帮助。它们指的是 SQL Server Express,因为我无权访问 postgressql。我通过将 SQL Server 表链接到 Access 并检查连接属性获得了连接字符串,但是,您也可以在这里查看:http://www.connectionstrings.com/postgre-sql。这两行将 Access 中 table1 中的值插入 SQL Express 中的 table2。在 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);

【讨论】:

    【解决方案3】:

    嘿,感谢所有帮助过我的人,我终于弄明白了。 因此,对于所有遇到相同情况的人 - 这是 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 2020-02-09
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多