2012-05-24 4 views
0

제품을 .NET으로 마이그레이션 한 직후에 잃을 MS 액세스 기능을 복제하도록 상사가 요청했습니다..NET SQL에서 데이터 업데이트보기

이 기능은 데이터베이스의 모든 데이터 (특히 테이블 또는 뷰)를 표 형식의 눈금으로보고 업데이트 할 수있는 기능입니다.

SqlDataAdapter는 DataTable을 통해 채우기/업데이트하기 위해 관련 CRUD 메서드를 자동으로 생성 할 수 있기 때문에 ID 열이있는 순수 테이블에 대해이 작업을 수행 할 수 있습니다.

그러나보기가 다소 까다 롭습니다. SQL Server Management Studio에서는이를 허용합니다. 보기에서 '상단 xx 행 편집'을 클릭하면 표준 .NET DataGridView로 보이는 일부 열의 데이터를 편집 할 수 있습니다. 약간의 마력이 들지만 말입니다.

그래서, 몇 가지 질문 :

SSMS는 키가보기에없는 경우에도 사용할 수있는 기본 키를 추론 않는 방법

?

SSMS는보기 내부의 열을 편집/삽입/삭제할 수 있는지 여부를 어떻게 결정합니까?

.NET 응용 프로그램 내에서 이것을 복제하는 최선의 방법은 무엇입니까?

DataGridView를 데이터베이스에 지속적으로 직접 연결되어있는 이전 스타일의 oledb/obdc 연결에 연결할 수 있습니까?

평소대로 모든 안내를 부탁드립니다. 그들은 하나의 테이블 인 것처럼

말론

답변

1

SQL 서버 뷰는만큼 그들은 특정 조건에 부합로, 업데이트 할 수 있습니다. documentation에서

:

업데이트 가능한 뷰

당신은 뷰를 통해 기초 기본 테이블의 데이터를 수정할 수 있습니다 긴 다음 조건에 해당 같이

모든 수정 UPDATE, INSERT 및 DELETE 문을 포함하여 은 하나의 기본 테이블에서 열을 참조해야합니다.

보기에서 수정되는 열은 테이블 열의 기본 데이터 인 을 직접 참조해야합니다.

집계 기능 : 열은 다음을 통해로서, 에 다른 방법을 도출 할 수없는 AVG는, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR, 및 VARP.

계산입니다. 이 다른 열을 사용하는 식에서 열을 계산할 수 없습니다. 집합 연산자 UNION, UNION ALL, CROSSJOIN, EXCEPT 및 INTERSECT 집합 연산자를 사용하여 형성된 열은 계산에 해당하며 업데이트 할 수도 없습니다.

수정되는 열은 GROUP BY, HAVING 또는 DISTINCT 절의 영향을받지 않습니다.

TOP는 WITH CHECK OPTION 절이있는 과 함께 뷰의 select_statement에서 아무 곳이나 사용되지 않습니다.

뷰의 FROM 절 에있는 하위 쿼리에 이전 제한 사항이 적용됩니다. 뷰 자체에 적용되는 것과 마찬가지입니다. 일반적으로 데이터베이스 엔진은 에서 수정 된 뷰를 하나의 기본 테이블로 모호하지 않게 추적 할 수 있어야합니다. 자세한 내용은 보기를 통해 데이터 수정을 참조하십시오.

SSMS가 특별한 일을한다고 생각하지 않습니다. 뷰의 내용을 편집하면 테이블의 내용을 편집하는 것과 똑같은 기능을 제공합니다. 사용자가 위의 조건을 준수하지 않는 변경을 시도하면 SSMS에 오류가 표시 될 수 있습니다.

SSMS는 키가보기에 있지 않더라도 기본 키를 어떻게 사용합니까?

아니요. SQL Server는 한 번에 하나의 기본 테이블 만 편집 할 수 있기 때문에 수행합니다.

SSMS는보기 내부의 열을 편집/삽입/삭제할 수 있는지 여부를 어떻게 결정합니까?

다시 말해서 SSMS가 아니라이를 결정하는 SQL Server입니다.

.NET 응용 프로그램 내에서 이것을 복제하는 최선의 방법은 무엇입니까?

모든보기가 위의 조건을 준수하면 테이블에 대해 수행하는 것과 동일하게 수행하지만 사용자가 할 수없는 일을하는 오류를 처리 할 준비가됩니다 (일부 사용자를 의미 함). SSMS를 직접 사용하는 경우와 마찬가지로 교육이 필요합니다.

+3

또한 뷰를 업데이트 할 수없는 경우 업데이트 트리거 대신 제공하여 STIL을 생성 할 수 있습니다.) 그러면 실제 테이블 삽입을 수행 할 수 있습니다. – TomTom

+0

Daniel, 고맙습니다. SQL이 모든 작업을 수행 할 수 있다면 좋습니다 (정상적인 경우). 그러나 SQL에 대한 지속적인 연결이 없으므로 일부 WHERE 절이 필요합니다. 뷰의 올바른 행을 업데이트하는 update 문과 함께. ROW_NUMBER 함수와 함께 데이터를 선택해도 좋을까요, 아니면 직접 데이터베이스를 편집 할 수있는 ADODB RecordSet과 함께 가상 모드에서 DataGridView를 사용해 볼 수 있습니다. – Marlon

+0

모든 단일 열 또는 열의 조합을 사용하여 뷰의 행을 식별해야합니다. 이 작업을 수행 할 수있는 열의 조합이없는 경우 (보기에 모든 열에 동일한 값을 가진 행이 포함될 수있는 경우) 신원으로 사용할 수있는보기에 새 열을 추가해야합니다. 모든 기본 테이블에 기본 키가있는 한 뷰에는 모든 기본 키 열의 조합으로 구성된 기본 키가 있습니다. 모든 열은 뷰에 의해 노출되어야하며 뷰에 일부 키가있는 경우 변경됩니다. 집합. –