代码之家  ›  专栏  ›  技术社区  ›  sora0419

从同一服务器上的两个数据库查询数据

  •  0
  • sora0419  · 技术社区  · 12 年前

    我正在使用Visual Studio 2010用C#编写程序。

    我需要从两个不同数据库中的两个表中收集数据。我正在使用Microsoft SQL Server Management Studio查看数据。

    两个数据库位于同一服务器上。我编写了一个SQL查询来连接两个数据库中的多个表,没有问题。我能够在ManagementStudio中查看,以确保我的查询是正确的。

    当我试图将查询放入C#代码时,我意识到了这个问题。我只能在连接字符串中指定一个数据库。

    var connectionSting = "Data Source=myTestServer.con;Initial Catalog=MyTrunkDB;MultipleActiveResultSets=True; User ID=User1;Password=somePW";
    

    假设我需要来自两个数据库MyTrunkDB和MyBranchBD的查询数据,我该怎么做?假设我的查询是正确的,唯一的问题是在一个查询中连接到两个不同的数据库。

    我还发现有人建议使用存储过程,但我对存储过程一无所知,也找不到任何相关的示例代码。

    如果有一种在C#代码中实现这一点的方法,那将是很好的,因为我更了解C#。

    谢谢

    2 回复  |  直到 12 年前
        1
  •  2
  •   Community Mohan Dere    8 年前

    如果您只是查询数据库而不尝试执行任何类型的扩展逻辑,则可以在SQL Server中创建一个连接到两个数据库的视图,如下所述--> Create view across multiple databases 。然后,您需要使用原始ADO.NET或通过LINQ to Entities和Entity Framework查询视图。如果您需要做任何更复杂的事情,您需要研究存储过程。

    **正如T.S.所指出的,您需要在两个数据库之一上创建此视图,并确保连接字符串指向该数据库。

        2
  •  0
  •   user3294259    12 年前

    只需在表名称之前命名数据库和表的所有者。在MS SQL Server中,这应该可以工作:

    select top 100 *
    from database.owner.table t1
    join database.owner.table t2 on t1.field1=t2.flield1 
    

    您也可以跳过所有者,它将用默认值替换它:

    select top 100 *
    from database..table t1
    join database..table t2 on t1.field1=t2.flield1
    

    如果您是用C#编写的,并且比T-SQL更了解它,那么您实际上不需要存储过程,因为您可以用C#方法替换它们。 我希望这有帮助。