单个查询中的多个连接字符串
multiple connection strings in single query
在 VB 中,如何将来自不同技术的两个语句连接到一个记录集中?假设我有 2 个语句:
Select name from server1.dbo.table1 where attribute = "something"
select name from server2.dbo.table2 where attribute = "something else"
我可以运行这些陈述中的每一个。假设 table1 是一个平面文件,而 table2 来自 SQL 服务器(或其他任何无关紧要的东西,希望如此)。我想要发生的是将这些加入 table3,它将在第三种技术中创建(恰好是 SAP,但让我们忽略这个问题)。我想要一个像这样的声明:
select table1.name into server3.dbo.table3 from table1 join table2 on table1.name=table2.name
我可以在 VB 中的单个查询中使用三个单独的连接字符串吗?
对于这个项目,我可以使用 vb.net、vbscript,甚至 vba/vb6,随便什么。如果我不得不离开 VB,这将使与第三种技术的连接变得更加困难,但并非不可能。另一方面,我是数据访问接口 (ado/dao/rdo/ODBC/OLEDB/etc.) 不可知论者。
我相信你不能直接这样做。通常,我在这些情况下所做的是在其中一个连接上创建一个临时 table 并从另一个连接导入所有数据。然后我执行连接并将数据移动到第三个连接。
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connectionString1 = "YOUR FIRST CONNECTIONSTRING HERE"
Dim connectionString2 = "YOUR SECOND CONNECTIONSTRING HERE"
Using connection1 = New SqlConnection(connectionString1)
connection1.Open()
Using command = connection1.CreateCommand()
command.CommandText = "CREATE TABLE #T (Name VARCHAR(64))"
command.ExecuteNonQuery()
End Using
Using connection2 = New SqlConnection(connectionString2)
connection2.Open()
Using command = connection2.CreateCommand()
command.CommandText = "SELECT Name FROM Table2"
Using reader = command.ExecuteReader()
Using bulkCopy = New SqlBulkCopy(connection1)
bulkCopy.DestinationTableName = "#T"
bulkCopy.BatchSize = 10000
bulkCopy.ColumnMappings.Add(0, "Name")
bulkCopy.WriteToServer(reader)
End Using
End Using
End Using
End Using
Using command = connection1.CreateCommand()
command.CommandText = "SELECT Table1.Name FROM Table1 INNER JOIN #T ON Table1.Name = #T.Name"
Using reader = command.ExecuteReader()
' Do what you want with the joined data here,
' if you like you can BulkCopy it on another connection
End Using
End Using
End Using
End Sub
End Module
Can I use three separate connection strings in a single query, in VB?
不,你不能。
因为当您 运行 一个查询(几乎在所有语言中)时,您实际上将一个字符串传递给一个驱动程序,它本身将查询实际的数据库。这就是 ADO、OLEDB 等的目的。
因此,在单个查询中,这是不可能的。
但是,您可以填写两个不同的数据集,一个用于您的每一种技术。
完成后,您可以创建第三个数据集,它将是前两个数据集的混合。您构建了第三个数据集 "manually"。
如果您只需要从数据库中读取 (SELECT) 就可以了。
如果您想在其中写入,则必须将对第三个数据集所做的任何更改报告给前两个数据集,然后将这些更改提交到数据库中。
在 VB 中,如何将来自不同技术的两个语句连接到一个记录集中?假设我有 2 个语句:
Select name from server1.dbo.table1 where attribute = "something"
select name from server2.dbo.table2 where attribute = "something else"
我可以运行这些陈述中的每一个。假设 table1 是一个平面文件,而 table2 来自 SQL 服务器(或其他任何无关紧要的东西,希望如此)。我想要发生的是将这些加入 table3,它将在第三种技术中创建(恰好是 SAP,但让我们忽略这个问题)。我想要一个像这样的声明:
select table1.name into server3.dbo.table3 from table1 join table2 on table1.name=table2.name
我可以在 VB 中的单个查询中使用三个单独的连接字符串吗?
对于这个项目,我可以使用 vb.net、vbscript,甚至 vba/vb6,随便什么。如果我不得不离开 VB,这将使与第三种技术的连接变得更加困难,但并非不可能。另一方面,我是数据访问接口 (ado/dao/rdo/ODBC/OLEDB/etc.) 不可知论者。
我相信你不能直接这样做。通常,我在这些情况下所做的是在其中一个连接上创建一个临时 table 并从另一个连接导入所有数据。然后我执行连接并将数据移动到第三个连接。
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connectionString1 = "YOUR FIRST CONNECTIONSTRING HERE"
Dim connectionString2 = "YOUR SECOND CONNECTIONSTRING HERE"
Using connection1 = New SqlConnection(connectionString1)
connection1.Open()
Using command = connection1.CreateCommand()
command.CommandText = "CREATE TABLE #T (Name VARCHAR(64))"
command.ExecuteNonQuery()
End Using
Using connection2 = New SqlConnection(connectionString2)
connection2.Open()
Using command = connection2.CreateCommand()
command.CommandText = "SELECT Name FROM Table2"
Using reader = command.ExecuteReader()
Using bulkCopy = New SqlBulkCopy(connection1)
bulkCopy.DestinationTableName = "#T"
bulkCopy.BatchSize = 10000
bulkCopy.ColumnMappings.Add(0, "Name")
bulkCopy.WriteToServer(reader)
End Using
End Using
End Using
End Using
Using command = connection1.CreateCommand()
command.CommandText = "SELECT Table1.Name FROM Table1 INNER JOIN #T ON Table1.Name = #T.Name"
Using reader = command.ExecuteReader()
' Do what you want with the joined data here,
' if you like you can BulkCopy it on another connection
End Using
End Using
End Using
End Sub
End Module
Can I use three separate connection strings in a single query, in VB?
不,你不能。
因为当您 运行 一个查询(几乎在所有语言中)时,您实际上将一个字符串传递给一个驱动程序,它本身将查询实际的数据库。这就是 ADO、OLEDB 等的目的。
因此,在单个查询中,这是不可能的。
但是,您可以填写两个不同的数据集,一个用于您的每一种技术。
完成后,您可以创建第三个数据集,它将是前两个数据集的混合。您构建了第三个数据集 "manually"。
如果您只需要从数据库中读取 (SELECT) 就可以了。
如果您想在其中写入,则必须将对第三个数据集所做的任何更改报告给前两个数据集,然后将这些更改提交到数据库中。