1

这是我的课:

public class Customer
   {
      public int ID { get; set; }

      public string Card_ID { get; set; }

      public double Cash { get; set; }

      public string Name { get; set; }

      public Image Photo { get; set; }
   }  

我需要SELECT在我的数据库上创建一个以获取一些信息customer,我曾经使用过,DataSet但我发现它在性能方面不是最佳选择。另外我只需要读取 2 或 3 个字段,我开始使用此方法:

public List<Customer> ConsultCustomerData(string cardID)
   {
      list<Customer> customer = null;
      string sql = "SELECT name, cash FROM customers WHERE card_id = @cardID";            
       try
          {
             MySqlCommand cmd = new MySqlCommand();
             cmd.CommandText = sql;
             cmd.CommandType = CommandType.Text;
             cmd.Parameters.Add(new MySqlParameter("@cardID", MySqlDbType.VarChar)).Value = cardID;

           }
        catch (Exception ex)
          {
            throw new Exception(ex.Message);
          }
   }  

现在我不知道如何继续......我如何使用or
返回这些信息?ListIList

4

6 回答 6

3

您可以使用 command.ExecuteReader 方法并使用 reader 填充实体数据。

 public List<Customer> ConsultCustomerData(string cardID)
 {
    List<Customer> list = new List<Customer>();
    string sql = "SELECT name, cash FROM customers WHERE card_id = @cardID";        

    MySqlCommand cmd = new MySqlCommand();
    cmd.CommandText = sql;
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Add(new MySqlParameter("@cardID", MySqlDbType.VarChar)).Value = cardID;

    using (IDbDataReader reader = cmd.ExecuteReader()) {
        while (reader.Read()) {
             list.Add(new Customer { 
                 Name = reader.GetString(0), 
                 Cash = reader.GetDouble(1) 
             });
        }
    }

    return list;
} 

查看:

  1. ADO.NET IDbCommand接口及其MySql 实现
  2. ADO.NET IDataReader接口及其MySql 实现
于 2013-06-11T12:44:19.593 回答
1

使用 SQL Data Reader 读取数据并将关联数据设置到您的实体并构建如下所示的列表。

    list <Customer> lstCustomer =new list <Customer>();
    while (reader.Read())
    {
         Customer cus=new Customer();
         cus.Card_ID =......
            .............
            ................
            lstCustomer.Add(cus);

     }
于 2013-06-11T12:51:01.437 回答
1

将 Model.edmx 添加到您的项目中。然后你可以很容易地理解其余的。它为您创建模型。您无需担心创建类。如果您有表关系,也很有帮助。您不必编写 SQL 代码来写入或读取数据库。

这是如何使用EF的链接。

于 2013-06-11T12:51:33.053 回答
1

您可以使用您的查询创建一个 detareader。之后初始化你的列表。循环内部的 do while(datareader.read())和内部创建一个 Customer 对象,提供读者的值,最后将其添加到列表中。

于 2013-06-11T12:44:07.220 回答
1

您可以使用cmd.ExecuteReader()或使用像Dapper这样的好 ORM 以良好的方式来完成它。

public List<Customer> ConsultCustomerData(string cardID)
{
    const string query = "SELECT name, cash FROM customers WHERE card_id = @cardID";
    try
    {
        using(var connection = new MySqlConnection(connectionString))
        {
            connection.Open();
            return connection.Query<Customer>(query, new { cardID }).ToList();
        }
    }
    catch(Exception ex)
    {
        // Logging, etc..
        Console.Write(ex.ToString());
        throw; //Rethrow exception
    }
}
于 2013-06-11T12:46:04.917 回答
1

我肯定会推动切换到使用像 Entity Framework 甚至 Linq to SQL 这样的 ORM - 但是,要回答您的问题,您需要从查询中读取信息,即

using (var reader = cmd.ExecuteReader())
{
    List<Customer> customers = new List<Customer>();
    while(reader.Read())
    {
        customers.Add(new Customer
        {
            Name = reader.GetString(0),
            Cash = reader.GetDouble(1)
        });
    }
    return customers;
}
于 2013-06-11T12:46:15.263 回答