将数据从SQL检索到类中

时间:2011-11-23 15:20:51

标签: c# sql

假设我的SQL数据库包含一个名为“Customer”的表。此客户具有ID,名字,姓氏和图像(byte[])。

我想要的是客户端上具有int,两个stringsbyte[]的类型(类)。然后将每条记录读入其中的每一条。

我知道一些C#,但是在使用C#访问时我有点新手,虽然我已经能够从远程服务器下拉记录了。一旦他们到达客户端,我只想对它们进行排序。

编辑:好的,似乎我对人们的喜好有点模糊,所以让我澄清一下。我知道如何创建一个类,我已经查找了使用ADO.NET命令将数据从SQL数据库传输到C#项目的详细信息。

我想知道的是如何将SQL表中的信息镜像为我的C#项目中的对象。因此,例如,我从我的表中下载了一条记录,它进入了一个对象。

以前我使用过Silverlight,它有一个EDMX模型和一个域服务类。如果有人熟悉这种行为,那基本上就是我想要模仿的东西。我会使用它,但我面临的一个限制是我只能单独使用应用程序端,而不是网站。

感谢。

4 个答案:

答案 0 :(得分:6)

这是一个关于如何使用数据读取器检索数据的简短示例:

var customers = new List<Customer>();
string sql = "SELECT * FROM customers";
using (var cnn = new SqlConnection(
    "Data Source=Your_Server;Initial Catalog=Your_Database;Integrated Security=SSPI;")) {
    cnn.Open();
    using (var cmd = new SqlCommand(sql, cnn))
    using (SqlDataReader reader = cmd.ExecuteReader()) {
        // Get ordinals from the customers table
        int custIdOrdinal = reader.GetOrdinal("CustomerID");
        int nameOrdinal = reader.GetOrdinal("Name");
        int imageOrdinal = reader.GetOrdinal("Image");
        while (reader.Read()) {
            var customer = new Customer();
            customer.CustomerID = reader.GetInt32(custIdOrdinal);
            customer.Name = reader.IsDBNull(nameOrdinal)
                            ? null
                            : reader.GetString(nameOrdinal);
            if (!reader.IsDBNull(imageOrdinal)) {
                var bytes = reader.GetSqlBytes(imageOrdinal);
                customer.Image = bytes.Buffer;
            }
            customers.Add(customer);
        }
    }
}

如果表列可以为空,则在检索数据之前检查reader.IsDBNull。

答案 1 :(得分:4)

您正在谈论创建ORM(对象关系映射器),这有点过于宽泛,无法在此处的单个答案中完全回答。

有关于如何编写一个here的详细教程。

但是,应该注意的是,已经存在大量用于.NET的ORM工具,其中许多已经列在本网站的其他问题中,例如this one

答案 2 :(得分:2)

查看有关CLR数据类型映射的this文章。 这是客户的类定义:

public class Customer {
public int ID {get;private set;}
public string fName {get; set;}
public string lName {get; set;}
public byte[] image {get; set;}
}

您可能希望查看linq to SQL以了解排序位,您可以应用.OrderBy(f=>f.Name);来执行数据集的排序。

需要更多关于您的信息?

答案 3 :(得分:0)

您应该尝试使用SqlConnectionSqlCommand,并使用您需要的信息填充DataTable