2011-06-02 130 views
4

我正在创建仪表板。我已经开始重构应用程序,所以与查询数据库有关的方法是通用的或动态的。动态查询SQL Server

我对泛型的概念相当陌生,仍然是一个业余程序员,但我做了一些搜索,我试图想出一个解决方案。问题不是真正以动态方式构建查询字符串。我很好地连接字符串文字和变量,我并不需要任何更复杂的东西。对我来说更大的问题是当我创建这个查询时,获取数据并以动态方式将其分配给正确的变量。

可以说我有一个缺陷表,另一个用于测试用例,另一个用于测试运行。我想创建一个如下所示的方法:

public void QueryDatabase<T>(ref List<T> Entitylist, List<string> Columns, string query) where T: Defect, new() 

现在,这不是完美的,但你明白了。并非所有关于缺陷,测试用例和测试运行的内容都是相同的,但是,我正在寻找一种将检索列动态分配给其“正确”变量的方法。

如果需要更多信息,我可以提供。

+0

您正在使用哪种版本的.NET? – msarchet 2011-06-02 19:51:33

+0

我正在使用.NET 4 – 2011-06-02 19:53:33

回答

3

你正在重塑车轮,是的,这是真的。建议您最好使用“货架”上的对象关系映射器。但我认为你也应该回答你的问题:为查询结果动态地分配正确的属性,你可以使用反射。如果需要更多信息,请参阅System.Reflection命名空间的文档。

14

你正在重新发明车轮。使用ORM,如实体框架或NHibernate。你会发现它更加灵活,这样的工具将会随着时间的推移而不断发展,增加新的功能并提高性能,同时你可以专注于更重要的事情。

编辑
虽然我认为总体来说要学会使用工具这样的事情(我个人实体框架的粉丝,现在已成功地用它在几个项目,并使用LINQ到SQL很重要在此之前),作为学习练习来了解如何做到这一点仍然很有价值。我有经验的ORM使用XML来定义数据模型,并使用XML文件上的代码生成来创建类模型。 LINQ to SQL使用代码生成的类上的自定义属性来为每个类和属性定义源表和列,并在运行时反映将从SqlDataReader返回的数据映射到类对象上的属性。无论使用“默认”还是“POCO”模板,实体框架的行为可能会有所不同,但最终做的基本相同(使用反射将数据库结果映射到类中的属性),它只是可能使用或不使用自定义属性来确定映射。我认为NHibernate也是这样做的。

+0

对不起,我是大多数这些技术的新手,但谢谢你,我会研究你提到的更多。 – 2011-06-02 19:54:09