这是我的班级:
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);
}
}
现在我不知道如何继续...
如何使用List
或IList
?
答案 0 :(得分: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 :(得分:1)
您可以使用查询创建datareader。初始化列表后。该做的
while(datareader.read())
并在循环内创建一个Customer对象,为读者提供值,最后将其添加到列表中。
答案 2 :(得分: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
}
}
答案 3 :(得分:1)
我肯定会推动切换到使用像Entity Framework这样的ORM甚至是Linq to SQL - 但是,要回答你的问题,你需要读取来自查询的信息,即
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;
}
答案 4 :(得分:1)
使用SQL数据读取器读取数据并将相关数据设置为您的实体并构建列表,如下所示。
list <Customer> lstCustomer =new list <Customer>();
while (reader.Read())
{
Customer cus=new Customer();
cus.Card_ID =......
.............
................
lstCustomer.Add(cus);
}
答案 5 :(得分:1)
将Model.edmx添加到您的项目中。然后你可以很容易地理解其余部分。它为您创建模型。您无需担心创建类。如果你有桌子关系也很有帮助。您不必编写SQL代码来从数据库写入或读取。
以下是link如何使用EF。