2010-07-27 55 views
3

我有一个非常动态的SQL Server问题来解决。我正在开发一个工具来验证多个数据库中的匹配数据。 [注意:这个项目的要求是相当严格的]是否有一个库可以动态使用Linq直接查询数据库?

我需要一个C#工具,让用户从动态列表中选择任何数据库,然后让用户选择一个表(作为源数据库/表)。一旦完成,用户再次为另一个数据库和表格(或多个表格作为目的地)执行此操作。

一旦选择了源和目标,用户可以选择哪些字段映射到哪些其他字段。

最后,程序需要遍历源表中的记录,并找到目标表的任何匹配的密钥。它需要检查的东西,只有一个关键匹配,所有其他映射字段具有相同的数据等...

我想在我的代码中使用Linq,只是传递字段/表的字符串我正在运行这个基本逻辑。问题是数据库&模式在编译时是未知的。

我正在寻找这个问题的方向。我似乎无法找到解决方案。我最近来到的是动态的Linq-to-sql库。但这只是在你的数据模型范围内动态的。我甚至无法拥有数据模型。

我想丢弃整个LINQ的东西放在一起的只是写我自己的快速和肮脏的方法链接生成我需要的基本的SQL(基本上是花哨的字符串生成器)的。

回答

3

我不认为LINQ到SQL是非常适合这项任务。 L2S擅长从数据库获取业务对象,并再次更新它们 - 一次一个(或几个)。

我不认为使用LINQ到SQL将大大在这种情况下,如果你真的处理有关问题的数据库和表的元数据你受益匪浅。在这种情况下,您既可以直接使用SQL和ADO.NET(SqlDataReader最好)来查询系统目录视图(如sys.tablessys.columns等),或者你可以考虑使用SQL Server Management Objects (SMO)库以访问的内脏你的SQL服务器。无论采用哪种方式,您最终都可能会得到您自己从零件和零件中组装的对象列表 - 当然,您还可以在这些内存列表和集合中使用Linq-to-Objects,没问题。

一些资源来看看:

+0

可能最好地利用ADO.Net“的getSchema “方法(http://msdn.microsoft.com/en-us/library/kcax58fh.aspx)或INFORMATION_SCHEMA视图(http://msdn.microsoft.com/en-us/library/ms186778.aspx)而不是“系统”。表。其他两种方法均得到支持和记录。 – 2010-07-27 04:58:39

+0

@Aydsman:“系统”。目录视图也完全记录在这里(这里是:http://msdn.microsoft.com/en-us/library/ms189082.aspx),并且通常比一般用途的ANSI-Standard INFORMATION_SCHEMA视图更有用(但特定于SQL Server) 。 – 2010-07-27 05:01:10

相关问题