首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access DB中是否存在返回的PostgreSQL版本?

问Access DB中是否存在返回的PostgreSQL版本?
EN

Stack Overflow用户
提问于 2019-03-09 02:27:27
回答 1查看 158关注 0票数 0

我有一个access数据库,我需要运行postgres数据库中可用的查询,我想知道是否有可能实现这一点:

代码语言:javascript
复制
Insert into Table (Col1,Col2...) values(Val1,Val2,...) returning * (ore even just an id defining that specific set of data that was just inserted)? 

我正在使用c#与DB.Anything通信将会有所帮助,谢谢。

我主要使用的代码如下:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.OleDb;

namespace Testquery1
{
    class Program
    {

        static void Main(string[] args)
        {

            string query = "INSERT INTO Table ( Val1, Val2, Val3 ) values(14,2,1)";
            Test1 queryselect = new Test1();
            queryselect.dataconnection(query);
        }


    }
    class Test1
    {

        public OleDbConnection connection = new OleDbConnection();
        string path = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        string fileloc = @"DataBase.accdb";
        string provider = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=";
        public void dataconnection(string query)
        {

            connection.ConnectionString = provider + path + fileloc;
            Console.WriteLine(connection.ConnectionString);
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = query;
            command.ExecuteNonQuery();
            connection.Close();
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-03-09 10:16:08

不幸的是,使用.net时,您不能在两个不同的连接之间执行追加或make table查询。

但是,您可以在Access中。

如果您有一个返回记录的工作SQL查询,那么您可以简单地将该查询保存在Access中(作为传递查询。

现在,您可以在Access中使用该查询,并将其发送到Access中的新本地表。(Access支持此概念,而.net不支持)

因此,您可以对该数据进行追加或“制表”。

更有趣的是,您甚至可以在Access中的不同连接之间进行附加。因此,您可以从一个Oracle表追加到access中MySQL、PostgreSQL或FoxPro表。

同样,您不能在.net中做到这一点。

那么,假设一个在PostgreSQL中工作的原始SQL (PostgreSQL格式)查询?获取相同工作查询,并将其作为传递查询保存在Access中。

然后,在Access中,您可以附加到Access中的表中(假定表结构与:

VBA (访问代码)

代码语言:javascript
复制
Dim strSQL as string
strSQL = "INSERT INTO LocalTable SELECT * from QryPassR"
Currentdb.Execute strSQL

如果你想在Access中创建一个具有相同结构的新表,那么就创建表(而不是追加),你可以:

代码语言:javascript
复制
Dim strSQL as string
strSQL = " SELECT * INTO LocalTable FROM qryPassR"
Currentdb.Execute strSQL

您还可以在VBA代码中更改PostgreSQL以包括该选择的条件。

(air代码-不考虑SQL注入问题)。

代码语言:javascript
复制
Dim strCity as string.

strCity = inputbox("What city to pull from PostGres?")

dim strSQL as string

strSQL = "select * from tbleHotels where City = '" = strCity & "'"

With currentdb.QueryDefs("QryPassR"
  .SQL = strSQL
End with
strSQL = "INSERT INTO LocalTable SELECT * from QryPassR"
Currentdb.Execute strSQL

‘上面会将来自PostGreSQL = Edmonton的所有记录复制到Access表中(在本例中称为本地表)。

如上所述,您不限于“LocalTable”是一个access表,它可以是一个FoxPro表、MySQL、SQL server等。因此,可以使用Access中的任何链接表-包括指向其他数据库系统的链接表。

如果您必须使用.net,那么您必须:

连接到第一个数据库。执行查询以拉取和填充数据表。

连接到第二个数据库。创建(打开)基于第二个数据库的数据表。

循环(迭代)第一个连接datatable中的每一行,并将该行复制到第二个datatable中(基于第二个连接)。

你必须逐行复制。(但是.net数据表有ImportRow方法,所以您不必逐列复制循环。(但您必须逐行循环)。

在Access中,此循环不是必需的,事实上,您可以使用SQL命令在两个表上操作,包括上面的make table和append,您甚至可以在这类表之间进行关系连接-甚至是基于不同连接(数据源)的表。

编辑

根据评论,看起来简单的问题是:

在Access中插入一行后,如何获取该插入的最后一个ID (标识)?

下面的vb.net代码将执行此操作: Imports System.Data.OleDb

代码语言:javascript
复制
Dim MyCon As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test2\test44.accdb")
MyCon.Open()
Dim strSQL As String = "insert into tblHotels2 (City) VAlues('Edmonton')"
Dim cmd As New OleDb.OleDbCommand(strSQL, MyCon)
Dim r As Integer
cmd.ExecuteNonQuery()
cmd.CommandText = "select @@IDENTITY"
r = cmd.ExecuteScalar
Debug.Print(r)

Output =最后一个主键id (自动编号)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55068979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档