0

TableAdapter를 채우는 데 사용하려고하는 뷰가 있습니다. 내 코드에서 처음으로 테이블 어댑터를 올바르게 채우고 바인딩 소스를 필터링하고 datarowviews를 사용하여 데이터 행을 반복하고 필요한 업데이트 (저장 프로 시저에서 수행)를 수행합니다. 이제 문제는 이러한 업데이트가 수행 된 후에 이러한 변경 사항을 반영하도록 tableadapter를 다시 채워야한다는 것입니다. 때로는 내가 사용하고있는 View에는 아무런 결과가 없으며 다른 경우에는 그렇지 않을 수도 있습니다. 데이터 작업 민감 나는 특정 예를 들어 줄 수는 없지만 내가 시도하고이 정확한 오류가있는 간단한 예테이블이 비어있을 때 Tableadapter.fill 시간이 초과됩니다.

_taMyView.Fill(_dsMyConnection.MyView) 
_bsMyView.Filter = "Number = 1" 
For Each drvMyViewRow in _bsMyView 
    Do Stuff 
    'stored procedure that updates MyTable (what the view was created from) 
Next 

_taMyView.Fill(_dsMyConnection.MyView) 
_bsMyView.Filter = "Number = 0" 

를 만듭니다 "제한 시간은 제한 시간 작업을 완료하기 전에에 경과. 만료 또는 서버가 응답하지 않습니다. "

좋아요, 내보기를 채우고 그 결과를 1과 같은 열 수로 필터링합니다. 모든 결과를 반복하고 내보기가 만들어지는 테이블을 업데이트합니다. 루프를 종료 한 후 약 20 초 후에 두 번째. 채우기 시간이 초과되었습니다. 테스트 후, MyView가 레코드를 보유하지 않을 때만이 시간 초과가 발생하는 것으로 보입니다. 어떤 도움이라도 대단히 감사하겠습니다.

몇 가지 부가가치가 있습니다. Visual Studio 2010과 sqlserver 2008을 사용합니다. 모든 작업은 VB.NET에서 수행됩니다. 또한 디버깅하는 동안 두 번째 채우기를 일시 중지하고 Toad for Data Analyst에 가서 SELECT * FROM MyView를 실행하여 시간이 초과되지 않고 약 19 초 내에 빈 결과 테이블을 반환했습니다. 나는 또한 두 번째 채우기 전에 tableadapter에 처리를 시도했지만 비슷한 시간이 있습니다. 죄송합니다.이 답변이 분명한 것처럼 보이면 저는 인턴 일 뿐이며 언어를 배우는 중입니다.

편집

MyAdapter.Adapter.SelectCommand.CommandTimeout = 0

(연결이 더 이상 열려이 허용하는 것보다 경우의 SQLServer가 종료됩니다) 그것이 완료 될 때까지 실행할 수 있습니다 나의 이해에서, 트릭을 할 것으로 보인다

. ta.fill은 Toad가 약 19-20 초 내에 들어 오며 여러 번의 테스트를 거친 후에도 오류가 발생하지 않습니다. 도움을 주셔서 감사합니다

답변

1

19 초? 행이 몇 개입니까? 보기가 얼마나 복잡합니까? Toad 또는 Management Studio에서 쿼리를 수행하는 데 19 초가 걸리면 VB.NET 코드에서 두 번 걸리는 것이 좋습니다. 아마도 CommandTimeout 값을 높이거나 (기본값은 30 초) 생각하거나 19 초가 너무 길다면 구조 최적화를 고려해야합니다.

+0

뷰는 기본적으로 SELECT * FROM MyTable IsActive = 1입니다. MyTable의 결과는 짧은 간격으로 실행되는 별도의 응용 프로그램에서 주기적으로 증가 및 감소하지만 일반적으로 테이블에는 500,000 개 이상의 데이터 행이 포함됩니다. 사용자가 간격으로 이메일을 보낼 때만 응용 프로그램과 상호 작용하는 사용자는 없습니다 (응용 프로그램이 10 분마다 실행되도록 설정되고 현재는 완전히 실행하려면 약 1.5-2 분이 소요됨). 따라서 결과가 반환되는 데 걸리는 시간은 큰 문제. CommandTimeout을 늘리는 방법은 무엇입니까? TableAdapter.Connection.ConnectionTimeout은 읽기 전용입니다. – Tony318

+1

자신에게 질문해야합니다. 테이블 어댑터에 500K + 행을 잠재적으로 가져 오기를 정말로 원하십니까? 정말로 500K + 행을 스캔하여 하나 또는 두 개 (또는 0)가 테이블 어댑터에 채워지는 것을 찾으십니까? 어쨌든, ConnectionTimeout <> CommandTimeout. MyAdapter.SelectCommandTimeout = 90 이상 (미안하지만, C#이 VB.Net이 아닌 경우)을 말할 수 있어야합니다. –

+0

나는 정말로 내가 선택의 여지가 많다고 생각하지 않는다. 이 테이블은 수신 한 파일의 행을 저장하는 데 사용됩니다.어떤 시점에서 그 테이블에있는 모든 행 하나가 이메일 어딘가에 보내지거나 무시할 때 표시됩니다 (훨씬 작은 볼륨에 도착하지만 문제가 발생할 경우를 대비하여 잠시 데이터를 저장합니다. 돌아 가야하고 그것을 봐야 해) 내가 가지고있는 정보를 끌어낼 수있는 작은 테이블은 없다. 내가 500k 행의 LOL로 붙어 있다는 것을 아는 한. – Tony318

관련 문제