2010-12-30 8 views
1

Visual C# Express 및 MySQL을 사용하여 데이터베이스 응용 프로그램을 만들었습니다. 문제는 데이터가 실제로 변경된 경우에만 C# 폼의 데이터베이스에 데이터를 저장하기를 원합니다. 이제는 '저장'버튼을 클릭 할 때 폼의 모든 필드가 변경 여부와 관계없이 데이터베이스에 저장됩니다.데이터베이스가 변경된 경우에만 값 저장

//when the details are loaded into the form 
String strOriginalName = txtFirstname.Text; 

//when the save button is checked 
if(strOriginalName != txtFirstname.Text) 
{ 
String strUpdate = "UPDATE table SET firstName = txtFirstname.Text"; 
MySqlCommand cmdUpdate = new MySqlCommand(strUpdate, connection); 
cmdUpdate.ExecuteNonQuery(); 
} 

다른 사람이 더 나은 또는 대체가 있습니까 나는 그것이 변경된 경우 단지 형태의 모든 분야를 확인하고 그에 따라 SQL 명령을 변경한다 때우기 솔루션, 즉 해결책? 도움을 주셔서 감사합니다. 내가 모호한 부분이 있으면 알려 주시면 자세히 설명 드리겠습니다.

+0

양식에 표시 할 데이터를 어떻게 쿼리하고 있습니까? MySQLCommand()를 실행하고 결과를 테이블로 가져 와서 테이블의 열에 바인딩하고 있습니까? 각 입력란의 속성이있는 사용자 지정 목록 ? – DRapp

+0

나는 이것이 꽤 오래된 것을 안다. 그러나 나는 원래 값을 저장하기 위해'.Tag' 필드를 사용하고 그 다음에 비교를한다. 여러 필드를 처리 할 때 값이 변경된 필드 만 사용하여 업데이트 쿼리를 작성합니다. '.Tag '는 사용자 정의 객체를 저장할 수도 있으므로 필드 이름, 유형 및 원래 값을 입력하면 쉽게 쿼리를 작성할 수 있습니다. –

답변

2

일부 매퍼 (NHibernate)를 사용하는 것이 좋습니다. 그것은 당신을 위해 그것을 모두 할 것입니다. 또한 캐싱 및 기타 멋진 것들을 무료로 제공합니다.

미래를 위해 배운 교훈은 귀중한 것이며 다음 번 응용 프로그램은 더 빠르고 더 빠르게 성장할 것입니다. :)

+0

더 이상 동의 할 수 없습니다. OR Mapper없이 웹 애플리케이션을 시작하는 것을 꿈꾸지는 않겠지 만 원할 경우 폼의 수명 동안 데이터 컨텍스트를 열어 둘 수있는 데스크톱 애플리케이션 세계에서 훨씬 강력합니다. 어딘가에 데이터베이스가 있다는 것을 잊을 수 있습니다. –

0

하나의 업데이트 쿼리가 있습니다. 매개 변수가 수백 개가 아니라면 성능 문제가 많이 발생하지 않습니다.

업데이트 할 클래스에 값이 변경 될 때마다 dirty 플래그가 true으로 설정됩니다.

플래그가 실제로 true 인 경우에만 데이터베이스로 업데이트하십시오.


는 또한, 자동으로이 문제를 처리해야 Unit Of Work를 구현하는 ORM을 사용합니다.

0
양식에 하나의 필드가있는 경우 다음이 올

...

하지만 당신은 당신의 형태로 여러 값 (필드)이있을 때 당신은 1 개 플래그 변수를 사용해야합니다. 텍스트는 당신이 그것을 사실로 그 플래그를 설정하고 업데이트해야합니다 변경되면

..하는 방식으로 ORMs에서

+0

이로 인해 두 명 이상의 사용자가 같은 레코드를 변경하여 전체 레코드의 마지막 업데이트를 전체 레코드로 만드는 다중 사용자 시스템에서 문제가 발생할 수 있습니다.현실 세계의 예는 성 (姓) 필드를 변경하는 한 명의 사용자이고 다른 사용자는 이름 필드를 변경하는 것입니다. 두 가지 모두 저장하면 가장 최근의 변경 사항 만 적용되며 변경된 필드 만 업데이트하면 두 가지 변경 사항이 모두 적용됩니다. 불행히도 실제로는 각 필드를 개별적으로 검사하는 것보다 더 좋은 방법은 없습니다. 단일 플래그는 모두 게으른 코드입니다. :) –

0

봐이 기능을 구현, NotifyPropertyChangedObject Change Tracking에 대한

검색합니다.

관련 문제