C# 응용 프로그램에서 강력한 형식의 데이터 집합을 사용하고 있으며 사용자가 행에 변경 한 내용을 기록 할 수 있기를 원합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?로깅 데이터베이스 행 변경
답변
C# 응용 프로그램의 변경 내용에 액세스 할 수 있도록 하시겠습니까? 아니면 그냥 로깅/감사 목적을위한 것입니까? 강력하게 형식화 된 데이터 집합이 SQL Server 테이블에 매핑되는 XSD 데이터 집합입니까? 내가 CB 리처드 엘리스에서 개발을 도운 큰 주문 시스템에서 SQL 서버
에
트리거, 우리는 버전 화 된 데이터를 유지하기 위해 별도의 테이블을 만들었습니다. 요청 테이블이 있다고 가정 해보십시오. Request_changes 테이블을 작성하십시오.
이CREATE TRIGGER [dbo].[tr_Request_update]
ON [dbo].[Request]
FOR UPDATE
AS
SET NOCOUNT ON
INSERT INTO dbo.Request_changes
(
--ID, // taken care of by IDENTITY(1,1)
--LogDate, // uses default value of GetDate()
ChangeAction,
SQLServerUser,
RequestID,
UserIDContact,
etc
)
SELECT
'UPDATE',
system_user,
-- Request fields
RequestID,
UserIDContact,
etc
FROM
inserted
SET NOCOUNT OFF
GO
create TRIGGER [dbo].[tr_Request_insert]
ON [dbo].[Request]
FOR INSERT
AS
SET NOCOUNT ON
INSERT INTO dbo.Request_changes
(
--ID, // taken care of by IDENTITY(1,1)
--LogDate, // uses default value of GetDate()
ChangeAction,
SQLServerUser,
RequestID,
UserIDContact,
Title,
etc
)
SELECT
'INSERT',
system_user,
-- Request fields
RequestID,
UserIDContact,
etc
FROM
inserted
SET NOCOUNT OFF
GO
당신은 반드시 (다른 XSD 데이터 세트에 그지도를하지 않는 한)이 _changes 테이블에 액세스 할 수없는,하지만 로깅 및 감사 및 추적을위한 좋아요 : 그럼 당신은 다음과 같이 INSERT 및 UPDATE에 대한 트리거를 설정 다운 버그와 역사.
다른 옵션
은 아마 당신은 SQL 서버와 같은 영구 저장소에 의해 뒷받침되지 않는 XSD 데이터 집합을 가지고, 당신은 단지 메모리 데이터 세트에서 사용하고 있습니다. 속성 값이 변경되었을 때 사용자에게 알려주는 많은 다른 디자인 패턴과 잘 알려진 구문이 있습니다.
또한 XSD 데이터 세트를 사용하는 경우 기존 코드 기반 또는 레거시 응용 프로그램을 사용하고 있기 때문에 가능합니까? 당신이 새로운 발전을한다면, 나는 그들에게서 멀어 질 것입니다. MS가 더 이상 활발하게 개발하지 않는 것은 오래된 기술입니다. 최신 버전의 Visual Studio와 함께 제공되는 MS 스택에 머물고 싶다면 Linq to Sql 또는 Entity Framework가 가장 적합합니다. 둘 다 다루기 쉬워야하며 융통성이 있습니다 (예 : I don XSD 데이터 세트가 null 값을 잘 처리한다고 생각하며 생성 된 클래스에서 .NET nullable 유형을 지원하지 않습니다.
- 1. Entity Framework를 통한 로깅 변경
- 2. log4net xml의 로깅 수준 변경
- 3. 엔터프라이즈 라이브러리로 데이터베이스 로깅 5
- 4. txt 파일에서 데이터베이스 로깅 시스템
- 5. ADO.NET을 통한 데이터베이스 액세스 로깅
- 6. 데이터베이스 변경
- 7. 변경 행 값은
- 8. DataGrid의 행 변경 방지
- 9. 변경 내용 업데이트 행
- 10. 스칼라 로깅 행 번호 - slf4s/slf4j?
- 11. 데이터베이스 행 수식 - Java
- 12. 모델에서 데이터베이스 행 업데이트
- 13. foreach로 데이터베이스 행 인쇄
- 14. Google App Engine/Python - 로깅 형식 변경
- 15. Ruby Savon Gem 변경 로깅 구성
- 16. 메인 데이터베이스 테이블에 로깅 정보를 저장해야합니까?
- 17. 서버 로깅 - 데이터베이스 또는 로그 파일에 있습니까?
- 18. PHP를위한 데이터베이스 클래스/툴킷에 간단한 로깅?
- 19. 한 번에 여러 개의 mysql 데이터베이스 변경 (SAAS 데이터베이스 변경)
- 20. 현재 선택된 데이터베이스 변경
- 21. 역 호환 데이터베이스 변경
- 22. 레일 : 데이터베이스 변경
- 23. 파이썬으로 데이터베이스 변경 배치하기
- 24. 데이터베이스 변경 허용
- 25. 데이터베이스 변경 관리 도구?
- 26. 엔티티의 데이터베이스 변경
- 27. 데이터베이스 변경 .SLN (VS2008)
- 28. 데이터베이스 이름 변경
- 29. 런타임시 JList 행 색상 변경
- 30. JTable 동적으로 행 높이 변경
사용자 감사 기능이 추가 된 레거시 시스템입니다. 현재 RowChanged 이벤트를 기반으로하는 로깅이 있지만 버그가있어 항상 기록하는 것은 아닙니다. 나는 모든 변경 사항을 로깅하는 더 나은 솔루션을 찾고 있는데 (액세스는 아마도 필요하지 않다), 괜찮 으면 애플리케이션 내부에서 볼 수있는 한 더 길다. 시스템에 자체 사용자 계정이 있지만 시스템 사용자 계정을 사용하는 것이 좋습니다. 너 자신에 대해 좀 더 설명해 주거나 나에게 뭔가를 연결시켜 주겠니? – Malfist
귀하의 경우 트리거가 잘 작동 할 수 있습니다. 이 응용 프로그램은 SQL Server에 의해 백업됩니까? 개별 [tableName] _changes 테이블을 매핑하는 XSD 데이터 세트를 만들 수도 있으므로 변경된 데이터를 앱으로, 감사 페이지 용으로 쉽게 가져올 수 있습니다. –