2012-09-28 2 views
1

C#을 사용하여 데이터베이스에 액세스하는 방법을 많이 보았습니다. 간단한 읽기/쓰기/데이터 조작을 위해 어떤 것이 "최상"인지 알지 못합니다. 난 그냥 일반 DataSet/DataTable 개체를 사용하는 데 사용하지만 더 많은 형식 안전한 구조를 사용하려고합니다. Visual Studio에서 데이터 세트 (xsd)를 추가하고 SQL 서버 백엔드에 연결하여 시작했습니다.C# 및 Visual Studio 디자인 타임 데이터 세트를 사용하여 데이터베이스에 액세스

주어진 문자열에 대해 테이블의 열을 검색하려고하는데 열이 기본 키가 아니므로 .Find()를 사용할 수 없습니다. 어떻게해야합니까? LINQ를 사용해야합니까, 아니면 확장 메서드/람다 식을 사용할 수 있습니까?

보다 기본적인 수준에서 디자인 타임 데이터 집합을 사용할 때 테이블 어댑터를 사용하여 내가 사용하는 데이터 집합의 각 테이블을 채우거나 데이터 집합을 인스턴스화해야합니까? 설명서가 다소 혼란 스럽습니다.

+0

tableadapter에서 매개 변수 쿼리를 사용하여 모든 데이터를 먼저 가져 와서 찾지 않고 원하는 행을 찾을 수없는 이유는 무엇입니까? – peterG

답변

3

DataSet을 쿼리하는 가장 효율적인 방법 (효율성 측면이 아니라 가독성과 유지 관리 측면에서)을 사용할 수 있습니다.

자세히 알아보기 : Querying Typed DataSets.

VS 디자이너에서 TableAdapter 또는 DataTable 만 만들 수 있습니다. TableAdapter VS를 추가하면 DataTable도 생성됩니다. DataTable 만 추가하는 경우에는 자신 만의 방법으로 데이터 테이블을 채워야합니다. TableAdapters은 ADO.NET에서 DataAdapter과 유사합니다.

당신이 DataSet1라는 이름의 데이터 집합을 생성 tabData라는 이름의 테이블을 선택하는 TableAdapter에 추가했습니다 그렇다면

, 비주얼 스튜디오가 자동으로 tabDataDataTable라는 이름의 DataTable을 생성하고 네임 스페이스 DataSet1TableAdapters에서라는 TableAdaptertabDataTableAdapter.

그래서이 방법으로이 테이블을 채울 수 :

var dataSet = new DataSet1(); 
var da = new DataSet1TableAdapters.tabDataTableAdapter(); 
da.Fill(dataSet.tabData); 

테이블 컬럼 NameAge을 가지고 있다고 가정하고 이름 "Jon" 나이로 시작되는 모든 행을 찾으려면 당신은> 30 LINQ의 Where 사용할 수 있습니다

var jons = dataSet.tabData 
        .Where(r => r.Name.StartsWith("Jon") && r.Age > 30); 
foreach (DataSet1.tabDataRow row in jons) 
{ 
    Console.WriteLine("{0} is {1} years old", row.Name, row.Age); 
} 

주 당신은 (r.Name 문자열 및 r.Age의 int입니다) 안전 LINQ - 투 - 데이터 집합 유형을 사용할 수 있습니다.

+0

이것은 DB에서 읽는 좋은 방법입니다. DS에 링크하여 데이터를 데이터베이스로 푸시 할 수 있습니까? 이 기사는 그 문제를 직접적으로 다루지 않는 것으로 보입니다. – FistOfFury

+1

@FistOfFury : 실제 ORM 매퍼를 원한다면'Linq-To-Sql' 또는'Linq-To-Enitites'를 사용할 수 있습니다. 'Linq-To-DataSet'은 이미 메모리에있는 객체를 쿼리하는 데 도움이되는'Linq-To-Objects'의 부분 집합입니다. 물론'DataAdapter'를 사용하여 데이터베이스를 DataTable에서 업데이트 할 수 있습니다. 그러나 그것은 ADO.NET이며 Linq와 직접적인 관련이 없습니다. –

관련 문제