我是C#的新手,这可能最终成为一个愚蠢的问题,但无论如何我都要问。
是否有一个使用C#的机制将执行的SQL语句的结果反序列化为c#对象?
我有一个C#程序从一个sql server中读取一个表来存储一个对象中的行 - 我正在手动将每个列值分配给一个对象成员,所以我想知道是否有办法将行自动序列化为一个宾语。或者甚至更好,在同一类型的对象集合中的整个表。
我的环境是C#,VS2010,.NET4,SQLServer2008。 假设我知道我需要的列,它不是select *查询。
还将赞赏一个简洁例子的链接。
感谢。
答案 0 :(得分:6)
您可以使用ORM执行此操作。 ADO.NET Entity Framework(结帐video tutorials)和NHibernate是受欢迎的选择。
答案 1 :(得分:4)
如果根据表名命名的列,则可以使用LINQ-to-SQL而不使用任何映射代码执行此操作 - 只需使用ExecuteQuery
:
using(var dc = new DataContext(connectionString)) {
var objects = dc.ExecuteQuery<YourType>(sql); // now iterate object
}
此外,可以使用string.Format
规则自动参数化sql:
class Person {
public int Id {get;set;}
public string Name {get;set;}
public string Address {get;set;}
}
using(var dc = new DataContext(connectionString)) {
List<Person> people = dc.ExecuteQuery(@"
SELECT Id, Name Address
FROM [People]
WHERE [Name] = {0}", name).ToList(); // some LINQ too
}
当然,您也可以使用VS工具创建类型化数据上下文,允许以下内容:
using(var dc = new SpecificDataContext(connectionString)) {
List<Person> people =
(from person in dc.People
where person.Name == name
select person).ToList();
}