2011-12-24 4 views
0

은 기본적으로는 패치 메커니즘 여기단일 연결에서 여러 트랜잭션을 사용

것은 내가 뭘하는지입니다 :

  1. 열고 SQL 연결.
  2. 트랜잭션을 시작하십시오.
  3. 소프트웨어 버전에 대한 데이터베이스의 레코드를 업데이트하십시오.
  4. 동일한 연결을 사용하여 동일한 데이터베이스에서 더 많은 쿼리를 실행합니다.
  5. 15-20 MB 파일을 다운로드하십시오.
  6. 동일한 연결을 사용하여 선택 쿼리를 실행합니다.
  7. 트랜잭션을 커밋하십시오.
  8. 트랜잭션을 닫습니다.

이 시퀀스는 파일을 다운로드하는 데 시간이 걸리므로 SQL Connection 시간 초과 문제를 일으 킵니다. 문제는 그 전에 파일을 다운로드 한 후에 만 ​​트랜잭션을 커밋 할 수 있다는 것입니다.

C#에 코드를 기록하십시오. 사용되는 데이터베이스는 다음 SQLCE 인 코드의 일부입니다 :

SqlCeConnection conn = new SqlCeConnection("ConnectionString"); 

conn.Open(); 
SqlCeTransaction ts = conn.BeginTransaction(); 

//A method call executes all the methods that with parameters 
(string sqlQuery, ref SqlCeConnection conn, SqlCeTransaction ts) 
{ 
SqlCeCommand cmd = new SqlCeCommand(); 
cmd.Connection = conn; 
cmd.Transaction = ts; 
cmd.CommandText = sqlQuery; 
cmd.ExecuteNonQuery(); 
} 

//A method call downloads the file of 15 to 20 MB 

//A method executes a select query that returns the version of the software by using same SQL connection. 

//The above query gives the error of SQl connection timeout 
ts.Commit(); 
conn.Close(); 

어느 한 문제를 수동으로 타임 아웃을 명령

+1

왜 거래하는 동안 큰 파일을 다운로드 하시겠습니까? 그것은 나에게 단순히 같다 : 잘못하고있는 것 ... 당신이 할 수있는 것은 내가 그것을 제거한다. –

+0

패치 메커니즘이라고 언급 했으므로 처음에는 데이터베이스 업데이트를 수행하고 바이너리 업데이트를 적용했습니다. 그리고 이진 업데이트가 sussessful이되면 데이터베이스 변경을 커밋하는 것입니다. – Bhushan

+0

관련성이 보이지 않습니다 - 트랜잭션 중에 큰 (ish) 파일을 다운로드하는 것은 여전히 ​​문제가 될 것입니다. 거래의 파일 ** 처음 **, * 외부 *를 다운로드하십시오. –

답변

0

에 시간 제한을 설정합니다.

동일한 연결 및 트랜잭션 개체를 파일을 다운로드하는 방법으로 전달했습니다. 그 방법에서는 파일을 다운로드하는 루프에서 간단한 select 쿼리를 실행했습니다. 이것은 연결과 트랜잭션을 활성화하는 데 도움이되었습니다. 여기에 인터넷 연결 속도가 느린 경우에도 SQl 쿼리가 실행될 때마다 루프에 영향을 미치지 않고 연결을 계속 활성 상태로 유지합니다.

0

세트를 해결하는 데 도움이 있습니다.

cmd.CommandTimeout = 180; 

이 예는이 내가 무슨 짓을 180초 (3 분)

+0

파일을 다운로드하는 데 필요한 시간이 인터넷 속도와 파일 크기에 따라 달라질 수 있으므로 도움이되지 않습니다. – Bhushan

+0

이 명령을 설정 한 후에도 시간 초과가 작동하지 않습니다. – Bhushan

관련 문제