从数据表创建C#对象

时间:2010-03-28 20:58:52

标签: c# class object datareader

我只是围绕着C#。我一直在创建类和对象,所以说我创建了一个名为Member的类:

 public class Member
 {
     public int MemberID;
     public string FirstName;
     public string LastName;
     public string UserName;
 }

我通过这样做创建了该类的新对象:

    Member Billy = new Member();

    Billy.UserName = "Jonesy";
    Billy.FirstName = "Billy";
    Billy.LastName = "Jones";

这一切都很好但是如果我查询了一个数据库并找回了5个成员,我可以动态创建对象吗?或者将这些成员存储在内存中的最佳方法是什么?

我使用VB.Net,我只是将它们添加到数据表中。但是我从来没有真正做过任何面向对象的编程,因为我正在学习C#,现在是学习OOP的最佳时机。

4 个答案:

答案 0 :(得分:1)

这是一个常见问题。幸运的是有一个很好的答案:Linq To Sql!您可以在此处阅读:http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

它基本上做的是它创建一个类,每个表在数据库中选择一个。这使得将所有对象直接从数据库中获取到面向对象的编程变得非常容易。

保存就像调用函数“SubmitChanges()”一样简单。有更多的提供商,但我认为Linq作为一个初学者很适合你,因为它抽象了许多讨厌的部分。

答案 1 :(得分:1)

我建议您查看LINQ to SQL。然后,您可以编写这样的代码来查询数据库以获取特定用户:

Member member = db.Members.Single(member => member.UserName == "Jonesy");

或让用户符合标准:

IQueryable<Member> members = db.Members
    .Where(member => member.LastName == "Jones");

LINQ to SQL还负责编写样板代码,以根据数据库结构声明类。

答案 2 :(得分:1)

如果您不使用LINQ to SQL(或实体框架),那么使用a regular ADO.NET DataReader,您将遍历结果,使用详细信息实例化一个新对象,并将其添加到列表中。

大致看起来像这样:

List<Member> members = new List<Member>();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    using (SqlCommand command = new SqlCommand(queryString, connection))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                Member member = new Member();
                member.UserName = reader.GetString(0);
                member.FirstName = reader.GetString(1);
                member.LastName = reader.GetString(2);
                members.Add(member);
            }
        }
    }
}

foreach(Member member in members)
{
    // do something
}

答案 3 :(得分:0)

Linq2Sql建议两​​次不是唯一的方法,但考虑到所有对象可以一对一映射到数据库中的表的情况下,它的工作正常。但我个人会选择EF,因为它允许你再有一层抽象。

另外我建议你看看db4o等,你可以省下你的poco,就是这样。