2013-10-30 3 views
1

저는 현재 SQL Server CE를 사용하는 WebMatrix를 사용하여 C# .Net WebPages에서 프로그래밍하고있는 환경에서 데이터베이스 트랜잭션을 사용하고 있습니다.C# .NET WebPages에서 SQL Server CE 데이터베이스 트랜잭션 구문은 무엇입니까?

처음에는 "내 프로젝트에서 100 % 필요하다고 느꼈기 때문에 이것을 조사하고있었습니다. 그러나 이제는 기본"Last-in-wins "동시성 정책이 다소 간단한 CRUD 시스템에서 제대로 작동한다는 것을 알았지 만 .

이제는 100 % 필요하다고 말하기에 충분한 지식이 없지만 가능하면 데이터베이스에 충돌해야하는 모든 문장을 수렴합니다. 시간에 대한 하나의 성명으로, 그래서 데이터베이스가 잠겨 야 횟수를 최소화하기 위해 (다시, 나는 이것에 대해 걱정할 가치가 있는지 모르겠지만, 그것은 단지 하나의 진술처럼 느낀다 청소기, 더 효율적이고, 오류가 발생하기 쉽습니다).

내 서버 측 코드에서 ID 번호 재사용 여부에 따라 INSERT INTO 또는 UPDATE 문을 추가해야하는 논리 분기가 있습니다. 문제는 트랜잭션이 아닌 복수의 UPDATE 및/또는 INSERT 문을 하나의 전 송 가능한 명령문에 결합 할 수있는 방법이 없다는 것입니다.

마지막으로, 내 환경에 대한 트랜잭션 구문을 직접 검토하면서 트랜잭션의 작동 방식을 설명하는 많은 페이지가 있었지만 구문 예제는 제공하지 않았습니다. 내가 타이핑으로 정확히 그러나, 사용되는 구문이 Intellisence에 표시되지 않습니다

http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlcecommand.transaction(v=vs.100).aspx

이 ... 그 사실 내 환경과 서버 측 코드를 대상으로 : 나는 ...이 페이지를 찾았어요 이것은 항상 문법이 잘못되었다는 이야기의 신호였습니다. 이 페이지에서 논리적으로 어떻게 설정해야하는지 쉽게 알 수 있습니다 ('try', 'catch'및 'finally'사용). 내 문제는 실제로 주어진 트랜잭션을 컴파일하는 방법에 대한 주어진 환경에 대한 구문을 찾을 수 없다는 것입니다.

SQL Server CE 환경을 사용하여 Web Matrix가있는 C# .Net 웹 페이지 내에서 복수 INSERTUPDATE 문을 사용하여 데이터베이스 트랜잭션을 컴파일하는 데 필요한 구문 예제를 제공 할 수있는 사람이 있습니까?

답변

1

트랜잭션은 데이터베이스에 대해 실행되는 명령 수를 줄이기위한 메커니즘을 제공하지 않습니다. 달성

command.ExecuteNonQuery(sql); 

데이터베이스에 하나의 호출 결과 :

"INSERT INTO table1 VALUES (x,y,z); INSERT INTO table2 VALUES(1,2,3)" 

이 그런 다음 한 번에 제비 뽑기를 실행할 수 있습니다 성명 구분 기호로 세미 콜론을 사용하여 - 당신은 배치 문에 의해 그렇게 당신의 목표.

그러나 :

SQL 컴팩트 일괄 문을 지원하지 않습니다. 그래서 당신은 그들을 사용할 수 없습니다. 차례로 각 명령문을 실행해야합니다.

삽입을 수행 할 때 데이터베이스 잠금에 신경 쓸 필요가 없습니다. 몇 초의 시간이 걸리고 데이터베이스 자체가 요청을 처리하거나 큐잉하여 사용자가 영향을받지 않도록합니다.

+2

또 다른 쿼리가 0 개의 새로운 행이나 모든 새로운 행을 볼 수 있도록 보장해야하는 경우 데이터베이스 잠금에 관심을 기울여야합니다. 이것은 새로운 데이터를 삭제하고 삽입 할 때 매우 중요합니다. 다중 쿼리 작업 도중 다른 쿼리가 사용자를 잡아서 잘못된/오도 된 데이터를 읽지 않도록 트랜잭션이 필요합니다. – jnm2

0

참조에 System.Transactions dll을 추가 했습니까? 물론 TransactionScope를 사용하고 있지만 IDbTransaction을 사용하는 경우 System.Data를 사용하여 을 추가해야합니다.

+0

미안하지만, TransactionScope와 IDb Transaction의 차이점을 알지 못합니다. 나는 모든 거래에 익숙하다. 나는 마이크로 소프트가'cshtml' 파일 범위에서 모든 dll 레퍼런스 셋업을 가지고 있다고 의도적으로 생각한다. 나는'.cshtml' 파일을 만들기 전에'.cs' 파일에'using' 문장을 추가해야했습니다. 미안하다. 너 혼자 혼란에 빠지면. – VoidKing

+0

또한 System.Data는이 페이지에서 이미 사용할 수 있습니다. – VoidKing