C# 从数据表创建对象

发布于 2024-08-27 01:56:57 字数 550 浏览 5 评论 0原文

我刚刚开始了解 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 的最佳时机。

I'm just getting my head round C#. I've been creating classes and objects so say i created a class called Member:

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

and I create a new object of that class by doing this:

    Member Billy = new Member();

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

That's all fine but what if I've queried a database and gotten back 5 members, can I create objects on the fly? Or what is the best way to store these members in memory?

I've used VB.Net where I would just add them into a datatable. But I've never really done any object-oriented programming before and thought since I'm learning C#, now's the best time to learn OOP.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

凯凯我们等你回来 2024-09-03 01:56:57

如果您不使用 LINQ to SQL(或实体框架),则使用 对于常规的 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
}

If you don't go with LINQ to SQL (or the Entity Framework) then using a regular ADO.NET DataReader you would loop through the results, instantiate a new object with the details, and add it to a list.

Roughly it would look like this:

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
}
贩梦商人 2024-09-03 01:56:57

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

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

保存就像调用函数“SubmitChanges()”一样简单。有更多这方面的提供者,但我认为 Linq 非常适合初学者,因为它抽象了很多烦人的部分。

This is a common problem. Fortunately there is a good answer to this: Linq To Sql! You can read about it here: http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

What it basically does is that it creates a class, one per table you choose in your database. This makes it very easy to get all your objects directly from the database into object oriented programming.

Saving is as easy as calling a function "SubmitChanges()". There are more providers for this but I think Linq will suit you well as a beginner as it abstracts a lot of the annoying parts.

梦醒时光 2024-09-03 01:56:57

我建议您查看 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 还负责编写样板代码以根据数据库结构声明类。

I'd recommend that you look at LINQ to SQL. Then you can write code like this to query the database to get a specific user:

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

or to get users matching a criterion:

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

LINQ to SQL also takes care of writing the boilerplate code to declare the classes based on the database structure.

隔岸观火 2024-09-03 01:56:57

Linq2Sql 建议两次并不是唯一的方法,但考虑到当所有对象都可以一对一映射到数据库中的表时,它就可以正常工作。但就我个人而言,我会选择 EF,因为它允许您多一层抽象。

另外我可以建议你看看 db4o 等,在那里你可以保存你的 poco ,仅此而已。

Linq2Sql suggested twice is not the only way, but having in mind case when all objects can be one to one mapped to tables in your database it works just fine. Personally I would go for EF instead however, because it allows you to have one more layer of abstraction.

Also I can suggest you to look at db4o and etc, there you just can save you poco and that's all.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文