문제

ASP MVC 응용 프로그램에서 표준 SQL (LINQ에서 SQL 또는 기타 ORM)을 사용하여 데이터베이스를 쿼리합니다.

데이터베이스 결과를 내 견해로 전달하고 내 견해에 대한 결과를 반복하고 싶습니다. 하지만 어떻게 해야할지 잘 모르겠습니다. 내가 본 모든 예는 일부 문자열이나 L2를 사용합니다. 나는 중첩 된 해시 타이블과 같은 것을 통과시키고 싶지만, 내가 생각할 수있는 유일한 것은 SQLDATAREADER 객체를보기에 전달하는 것입니다. 그러나 이것은 정말 나쁜 생각처럼 들립니다.

표준 SQL 쿼리에서 내보기에 데이터베이스 결과를 표시하는 방법은 무엇입니까? 나는 LINQ 나 다른 ORM을 정말로 사용하고 싶지만 요구 사항은 우리가하지 않는 것을 지시합니다 (이유를 묻지 말고 이해가 안 돼요). 나는 VB에서 이것을하고 있습니다. 제공된 모든 C# 예제를 변환하기 위해 최선을 다하겠습니다.

도움이 되었습니까?

해결책

전송하려는 데이터에 대한 간단한 클래스를 생성 한 다음 수동으로 데이터 리더에서 컨트롤러의 객체 목록을 채우고이를보기로 전달할 수 있습니다 (예 : C#이지만 변환하기가 쉽습니다).

// open your connection / datareader etc.

List<Customer> customers = new List<Customer>();

while(dataReader.Read())
{
 Customer c = new Customer();
 c.Id = dataReader.GetInt32(0);
 c.Name = dataReader.GetString(1);
 // etc (you might want to use string indexers instead of ints for the get methods)

 customers.Add(c);
}

// close and dispose your datareader / connection etc as usual

return View("List", customers);

다른 팁

MVC는 우려의 분리에 관한 것입니다. SQLDATAREADERS, DATATABLE 또는 SYSTEM.DATA 네임 스페이스에있는 클래스를 전달하는 것은 좋은 생각이 아닙니다. 데이터베이스와 대화 할 수있는 모델 과이 모델을보기로 전달하는 컨트롤러를 정의해야합니다. 회사 정책에 따르면 ORM을 사용하지 않는다고 말하면 클래식 웹 포름이 MVC 패턴보다 시나리오에 더 적합 할 수 있습니다.

나는 Rashack에 동의합니다. 이 기사에서는 자세히 설명합니다.링크 텍스트

간단히 말해서, 데이터 가능 및 DataReader를 사용하여 수행하는 방법은 다음과 같습니다.

private DataTable GetData()
{
    DataTable dt = new DataTable();

    using (SqlConnection connection
             = new SqlConnection("ConnectionString"))
    using (SqlCommand command = new SqlCommand())
    {
        command.Connection = connection;
        command.CommandText = "SELECT * FROM Customers";

        connection.Open();
        using (SqlDataReader reader =
            command.ExecuteReader
                (CommandBehavior.CloseConnection))
        {
            dt.Load(reader);
        }
    }

    return dt;
}

그런 다음 해당 데이터 가능을 전달하는 엔티티 객체로 읽을 수 있습니다.

LINQ 또는 ORM을 사용하는 것보다 이것이 훨씬 더 나은 성능을 제공 할 수 있다고 생각합니다.

DataTables를 사용해보십시오 - DataTable은 IdatAreader의 데이터를로드 할 수 있습니다 ...

당신은 당신 자신을 만들 수 있습니다 데이터 전송 객체 ADO.NET 코드를 사용하여 클래스 및 인스턴스를 채우십시오. 이 DTO 클래스는 간단합니다 포코-방금 속성을 포함한 스타일 클래스는 액세서를 얻거나 세트하는 방법이 없습니다. POCO 객체를 사용하는 것은 DataSets/DataTables가 가벼우므로 (불필요한 상태 없음) 객체 지향적 관점에서 작업하는 것이 더 직관적이므로 틀림 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top