하는

2013-06-11 2 views
1

이 내 클래스 : 나는 customer의 몇 가지 정보를 얻을 수 내 데이터베이스에 SELECT을해야하는

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; } 
    } 

, 나는 DataSet를 사용하는 데 사용하지만, 나는 그것이 아니다 보았다 성능면에서 가장 좋은 선택입니다.

이제
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을 사용하여 해당 정보를 반환 할 수 있습니다 또한 나는이 방법을 시작, 만 2 ~ 3 필드를 읽을 필요가?

+1

Entity Framework 또는 모든 종류의 ORM을 사용할 수 있습니다. – Dilshod

+0

아마도'DataReader'를 사용하여 루프를 돌면서 'customer.Field'에 값을 할당 할 것입니다. 그러나 나는 \ – Ghaleon

+0

을 만들지 않았다. 각각의 'cmd' 결과에 대해, 다시'Customer' 객체로 파싱해야 할 것이다. 또는 Entity Framework와 같은 ORM을 사용하면이 작업을 수행 할 수 있습니다. – CodeCaster

답변

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 implementation
  2. ADO.NET IDataReader 인터페이스와 당신이 그것을 할 수 MySql implementation
+0

누군가 제가 SQL 인젝션을 쉽게받을 수 있다고했는데 저를 구해줄 수 있습니까? – Ghaleon

+0

+1 그게 정확히 무엇입니까. :) –

+1

당신은 이미 매개 변수를 사용하여 SQL 삽입에서 자신을 저장했습니다. –

1

검색어로 디리어리어를 생성 할 수 있습니다. 당신 목록을 초기화하십시오. while(datareader.read()) 그리고 루프 내부에 독자의 값을 제공하는 Customer 개체가 만들어지며 결국에는 목록에 추가됩니다.

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 
    } 
} 
+0

나는 ORM을 한번도 사용하지 않았습니다. 그것에 대해 좋은 기사가 있습니까? 나는 그것에 대해 읽을 것이다 – Ghaleon

+0

구글과 StackOverflow는 ORM을위한 꽤 좋은 기사를 가지고있다. – Romoku

1

확실히 SQL에 엔티티 프레임 워크 또는 Linq에 같은 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; 
} 
+0

'Entity Framework'을 사용한 적이 한번도 없었습니다. 나는 지금 그것에 관해 읽을 것이다. – Ghaleon

+1

@Ghaleon은 그다지 단순화되지 않았습니다. 아마도 [코드 첫 번째] (http://msdn.microsoft.com/en-US/data/jj200620) 접근 방식을 고려해야합니다. – James

1
에서 정보를 읽어

SQL Data Reader를 사용하여 데이터를 읽고 관련 데이터를 엔티티에 설정하고 아래와 같이 목록을 작성하십시오.

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

    } 
1

Model.edmx를 프로젝트에 추가하십시오. 그러면 나머지는 쉽게 이해할 수 있습니다. 그것은 당신을위한 모델을 만듭니다. 수업을 만드는 것에 대해 걱정할 필요가 없습니다. 테이블 관계가있는 경우에도 유용합니다. 데이터베이스에서 쓰거나 읽으려면 SQL 코드를 작성할 필요가 없습니다.

여기에 EF 사용 방법은 link입니다.

+0

감사합니다! 나는 지금 그것에 관해 읽을 것이다. – Ghaleon

+0

링크의 동영상을보고 있습니다. 이 Entity Framework와 Typed Dataset의 차이점은 무엇입니까? – Ghaleon

+1

@Ghaleon 여기에서 대답을 찾을 수 있습니다. http://msdn.microsoft.com/en-us/library/esbykkzb%28v=vs.71%29.aspx – Dilshod