C#从datatable创建对象
我正忙得团团转。我一直在创建类和对象,所以我创建了一个名为Member的类:C#从datatable创建对象,c#,class,object,datareader,C#,Class,Object,Datareader,我正忙得团团转。我一直在创建类和对象,所以我创建了一个名为Member的类: public class Member { public int MemberID; public string FirstName; public string LastName; public string UserName; } 通过这样做,我创建了该类的一个新对象: Member Billy = new Member(); Billy.UserN
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的最佳时机。这是一个常见的问题。幸运的是,有一个很好的答案:LINQtoSQL!您可以在此处阅读: 它基本上是创建一个类,在数据库中选择每个表一个类。这使得直接从数据库获取所有对象进入面向对象编程变得非常容易
保存就像调用函数“SubmitChanges()”一样简单。这方面有更多的提供者,但我认为Linq将非常适合您以及初学者,因为它抽象了许多恼人的部分。我建议您看看Linq to SQL。然后,您可以编写如下代码来查询数据库以获取特定用户:
Member member = db.Members.Single(member => member.UserName == "Jonesy");
或让用户符合标准:
IQueryable<Member> members = db.Members
.Where(member => member.LastName == "Jones");
IQueryable members=db.members
。其中(member=>member.LastName==“Jones”);
LINQ to SQL还负责编写样板代码,以根据数据库结构声明类。如果不使用LINQ to SQL(或实体框架),则使用将循环遍历结果,实例化具有详细信息的新对象,并将其添加到列表中 大致上是这样的:
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
}
列表成员=新列表();
使用(SqlConnection连接=新的SqlConnection(connectionString))
{
connection.Open();
使用(SqlCommand=newsqlcommand(queryString,connection))
{
使用(SqlDataReader=command.ExecuteReader())
{
while(reader.Read())
{
成员=新成员();
member.UserName=reader.GetString(0);
member.FirstName=reader.GetString(1);
member.LastName=reader.GetString(2);
成员。添加(成员);
}
}
}
}
foreach(成员中的成员)
{
//做点什么
}
Linq2Sql建议两次并不是唯一的方法,但请记住,当所有对象都可以一对一映射到数据库中的表时,它就可以正常工作。但就个人而言,我会选择EF,因为它允许您拥有更多的抽象层
另外,我可以建议你看看db4o等等,在那里你可以保存你的poco,仅此而已。C#与VB.Netyeah没有什么不同,但是我确信VB.Net没有面向对象的与C#面向对象的会有很大的不同!VB.NET绝对是面向对象的。你是说VB6(“经典VB”)?不,对不起,我的意思不仅是我要从VB.NET转到C#,而且我以前从未学习过面向对象编程,现在认为是学习的好时机。我已经开发VB.NET应用程序大约11个月了,但没有使用类等。这就是我的想法!就最佳实践而言,花时间学习LINQtoSQL更好,还是我可以坚持使用好的老SQL?Cheers@Jonesy这是在LINQ转换为SQL之前出现的,它是数据库交互的普通方法(也有类型化数据集),最接近金属,但不为您生成任何类。LINQ到SQL/EF是对象关系映射器(ORM)并为您生成类。所以这完全取决于你想做什么。LinqtoSQL在幕后使用这些东西。最佳实践并不规定要使用哪种技术,而是规定如何使用每种技术。也就是说,ADO.NET、LINQ到SQL等都有最佳实践。是的,我想我宁愿自己定义类,然后用这种方式创建对象。干杯@Jonesy我发布了这些信息来演示最基本的做事方式。当然,如果你有时间,一定要考虑其他选择。它们确实大大缩短了开发时间,但您需要学习如何使用它们。StackOverflow使用LINQ to SQL:)实体框架是微软正在推动的新技术。@Ahmad:-1用于树立一个坏榜样。
SqlCommand
和SqlDataReader
都需要使用块。维托尔:我建议你详细说明你所说的“多一层抽象”是什么意思。我知道你的意思是这些类不必与数据库一一对应,但是OP现在可能知道了。尤其如此,因为他收到了很多关于使用LINQ to SQL的建议。@John Saunders:谢谢你的建议,不过我的信息的要点是看看db4o,因为在某些情况下它可能是非常简单的持久性实现。@vittore:在这种情况下,我建议你从“我也可以建议”开始写一段新的内容约翰·桑德斯:事实上是这样的,但是有一个CR并不能开始新的段落,现在为什么不呢?当我输入两次时——它works@vittore:当您提出问题并单击正文时,请参阅或“如何设置格式”框。