2011-10-15 5 views
9

모두 저는 학생이며 .NET과 특별히 MVC3 개발에 익숙하지 않지만 프로젝트 중 하나에 대해서는 학습 단계를 거쳐야하므로 문제와 혼란이 있습니다. 나는 데이터베이스에서 레코드를 검색에 관한 거라고 leanree whast DB-연결성에 관한 것은이 같은 것입니다 :SqlCommand와 SqlDataAdapter 사이에 혼동이 있음

//Method One: 
var conn = new SqlConnection(conString.ConnectionString); 
const string cmdString = "Select * FROM table"; 
var cmd = new SqlCommand(cmdString, conn); 
var mySqlDataAdapter = new SqlDataAdapter(cmd); 
mySqlDataAdapter = new SqlDataAdapter(cmd); 
mySqlDataAdapter.Fill(myDataSet, "design"); 
// making a new SqlCommand object with stringQuery and SqlConnection object THEN a new SqlDataAdapter object with SqlCommand object and THEN filling up the table with the resulting dataset. 

하지만 MSDN Library 체크 아웃하는 동안 나는 SqlDataAdapter를이 생성자 SqlDataAdapter를 (문자열, 문자열)를 제공 사실을 발견 직접 SelectCommand 및 연결 문자열을 사용하여 SqlCommand 역할을 건너 뛰고 다음과 같이 시작합니다.

//Method Two: 
var conn = new SqlConnection(conString.ConnectionString); 
const string cmdString = "Select * FROM table"; 
var mySqlDataAdapter = new SqlDataAdapter(cmdString, conn); 
mySqlDataAdapter.Fill(myDataSet, "design"); 

내게 짧고 예쁘게 보입니다.하지만이 방법으로 가능하다면 책/교사의 대부분이 이전 (SqlCommand의 방식)으로가는 이유는 여기에서 혼란 스럽습니다.

  • 실제로 SqlCommand와 SqlDataAdapter의 차이점은 무엇입니까?
  • 어떤 방법이 더 좋습니까 하나 또는 두 가지?
  • Am는 보안이나 성능에 현명한 영향을 미칠 수있는 방법 2의 바로 가기를 사용하고 있습니까?

매우 신참하거나 흐리게 들으면 미리 사과하십시오! 내 개념을 정리할 수있는 도움을 주시면 감사하겠습니다! 고맙습니다! :)

답변

7

Errorstacks 바로 그것을 합산 :

  • SqlAdapter은 데이터 세트를 채우기 위해 사용된다.
  • SqlCommand는 만들기/읽기/업데이트/삭제 작업, 저장 프로 시저 실행 등과 관련하여 염두에두고있는 모든 용도로 사용할 수 있습니다. 또한

:

  • 하는 SqlCommand의 보안 관련 원시 문자열의 사용에 대해 하나의 큰 장점을 가질 수있다 - 그들은는 SQL 주입으로부터 당신을 보호 할 수 있습니다. string.Format (...) 대신 사용자가 제공 한 값에 매개 변수를 사용하기 만하면됩니다.

내 개인적인 취향은 SqlCommand에 ANY SQL 문자열을 래핑하고 SqlParameters를 추가하여 악의적 인 사용자가 SQL 주입을하지 않도록하는 것입니다.
두 가지 접근 방식의 성능에 관해서 - 나는 차이가 있다고 생각하지 않습니다. (누군가 내 잘못을 증명할 수 있다면 -해라!).
그래서 더 긴 변형 1을 고수하고 필요한 경우 더하기 매개 변수를 사용하는 것이 좋습니다.

사이드 노트 - 데이터 세트 및 데이터 테이블은 Linq2Sql 및 Entity Framework로 인해 최근에 다소 부족한 게임입니다.
물론 일반 SqlCommands/어댑터/독자의 지식을 환영합니다 :)

-6

서둘러! LINQ에 주목!

더 이상의 gran'ma는 SQLDataset 또는 TableAdapters와 같은 오픈 연결이 없습니다. 모든 것이 LINQ로 부드럽게됩니다.

LINQ 샘플 : = myDataContext.Employees에 EMP에서 emp.Salary이> 10000 선택 emp.ID, emp.SurName, ...

myDatagrid.datasource = 결과

희미한 결과 LINQ와 .toList

, 당신은 ... 작은 따옴표 또는 쿼리 내에서 CRLF에 대해

을 걱정할 필요가 없습니다 그리고 당신은 심지어 SQL 테이블, 열 및 개체에 대한 인텔리을해야합니다!

+0

그 질문에 답하지 못했습니다. 또한 때때로 LINQ를 사용할 수 없습니다. 예를 들어, 버전 3.5 이전의 .NET CE 버전에서는 사용할 수 없습니다. –

관련 문제