2013-03-19 72 views
2

我和我的小项目工作,并停止在这一点上 我有2台SQL服务器,一台 - 是部门的SQL Server(只读)和我的复制本地服务器。 在VB.net我打开连接与ADODB的lib 如何连接到2个不同的SQL服务器VB.NET

connectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Work;Data Source=server1\SQLEXPRESS" 
     ginfo = "Select * From base1.dbo.table1 " 
     cn = New ADODB.Connection 
     rs = New ADODB.Recordset 
     cn.Open(connectionString) 
     rs.Open(ginfo, cn, ADODB.CursorTypeEnum.adOpenStatic) 
     i = 0 
     With rs 
      If rs.BOF = False Then 
       Do While Not .EOF 
        ReDim Preserve users(i) 
        users(i).name = rs.Fields(2).Value 
        lb_sfio.Items.Add(users(i).name) 
        i = i + 1 
        .MoveNext() 
       Loop 
      End If 
     End With 

所以下一阶段连接到第二个服务器和获取信息,从另一台服务器 文字类同。 但是,我很有趣,因为在我的变异与2个服务器与SQL脚本语言 是如何工作的,例如

ginfo = "SELECT * FROM srv1.bs1.dbo.tbl1 EXCEPT SELECT * FROM srv2.bs1.dbo.tbl1" 

是太慢。 也许第二个问题是如何在没有完全比较的情况下在数据库中找到更新(db有4k字符串,这很无聊)。

回答

5

您可以将Server2作为linked server添加到Server1

然后,你就Server1查询将如下所示:

use base1 
SELECT field1 FROM table1 EXCEPT SELECT field1 FROM server2.base1.dbo.table1 

但是你应该知道的performance implications与对链接服务器的查询。

的链接过程需要在Server1ALTER ANY LINKED SERVER权限。在查询之前,您不必每次重复此操作,链接的服务器都会一直保留,直到被删除。

+0

这是完全工作,如果我有只读帐户? 的sp_addlinkedserver [@服务器=] '服务器'[[@ srvproduct =] 'PRODUCT_NAME'] [[@提供商=] 'PROVIDER_NAME'] [[@ DATASRC =] 'DATA_SOURCE'] [[@位置= '位置'] [[@ provstr =] 'provider_string的'] [[@目录=] '目录'] 此代码必须运行总是该起始我的程序,或仅1中MSSQL时间? – user2185412 2013-03-19 08:19:47

+0

您将需要一个DBA配置只读服务器上的链接...或者你CASN在1个方向的链接 - 例如,Server2上可以使用'Server1.Db.dbo.T'但Server1上无法做'Server2.Db .dbo.T'。只有一次 – Basic 2013-03-19 08:20:51

+0

好。谢谢。我正在尝试,然后再写 – user2185412 2013-03-19 08:24:25