1

SQL Server 2008에서 FOR XML AUTO에 해당하는 저장 프로 시저를 구성했습니다. 이제 테스트 중이므로 실제로 도움이되지 않는 오류 메시지가 나타납니다. 이 오류는 무엇을 의미합니까?CLR 저장 프로 시저를 실행하는 동안 .NET Framework 실행이 중단 되었습니까?

Msg 10329, Level 16, State 49, Procedure ForXML, Line 0 .NET Framework execution was aborted. 

System.Threading.ThreadAbortException: Thread was being aborted. 

System.Threading.ThreadAbortException: 

    at System.Runtime.InteropServices.Marshal.PtrToStringUni(IntPtr ptr, Int32 len) 
    at System.Data.SqlServer.Internal.CXVariantBase.WSTRToString() 
    at System.Data.SqlServer.Internal.SqlWSTRLimitedBuffer.GetString(SmiEventSink sink) 
    at System.Data.SqlServer.Internal.RowData.GetString(SmiEventSink sink, Int32 i) 
    at Microsoft.SqlServer.Server.ValueUtilsSmi.GetValue(SmiEventSink_Default sink, ITypedGettersV3 getters, Int32 ordinal, SmiMetaData metaData, SmiContext context) 
    at Microsoft.SqlServer.Server.ValueUtilsSmi.GetValue200(SmiEventSink_Default sink, SmiTypedGetterSetter getters, Int32 ordinal, SmiMetaData metaData, SmiContext context) 
    at System.Data.SqlClient.SqlDataReaderSmi.GetValue(Int32 ordinal) 
    at System.Data.SqlClient.SqlDataReaderSmi.GetValues(Object[] values) 
    at System.Data.ProviderBase.DataReaderContainer.CommonLanguageSubsetDataReader.GetValues(Object[] values) 
    at System.Data.ProviderBase.SchemaMapping.LoadDataRow() 
    at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping) 
    at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue) 
    at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) 
    at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) 
    at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) 
    at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) 
    at ForXML.GetXML... 

답변

3

나는 또 다른 메모에서

... 당신이 잘못했던 의미 확신 : 당신은 데이터 테이블을 작성하는 것 같습니다. 호출하는 동안 뭔가를 문자열 값으로 변환하려고 시도하고 있습니다. 실패했습니다.

문자열 표현으로 변환 할 수없는 문자열이 있는지 다시 확인해야합니다. 어쩌면 이진 값이나 null 값 또는 이와 비슷한 값일 수 있습니다.

+3

"나는 그것이 당신이 잘못했음을 확신합니다."와우. 나는 그걸 알아 내지 못했을거야. 아마 아마도 stackoverflow에서받은 적이있는 가장 멋진 답변 일 것 같습니다. 나는 뭔가 더 냉소적이고 여기에 의미가 있다고 말하지만, 그것은 생산적이지 않을 것입니다. 당신이 대답을 가지고 있다면 (당신이했던 것처럼, 나중에 당신의 포스트에서) 당신은 그것에 대해 저크가되지 않고 그것을 추가해야합니다. – bitcycle

+1

와우. "여기에 오류가 있지만, 어떤 일이 일어 났을 지에 대한 단서를주기 위해 코드 나 데이터를 제공하지 않았습니다."라고 일반적인 질문에 대한 혀로 뺨을내는 반응을 의미했습니다. 작은 웃는 얼굴이 효과를 냈습니까? 젠체하는 사람을 밝게해라. – NotMe

+1

@Sean Ochoa : [Lighten Up ...] (http://www.youtube.com/watch?v=fiH9yXKSMVM#t=5m2s) – Randolpho

3

일반적으로 ADO.NET 데이터 집합/테이블/어댑터 작성 중에 발생하는 스레드 중단 예외는 데이터를 검색하는 데 사용 된 수단의 제한 시간보다 쿼리가 길어 졌기 때문에 발생합니다.

직접 SQL Server 연결을 사용하고있는 것처럼 보이므로 SQL 명령의 CommandTimeout 속성을 쿼리에 맞게 충분히 큰 값으로 설정해보십시오. 더 나은 성능을 위해 쿼리 또는 응용 프로그램 아키텍처를 미세 조정할 수 있습니다.

+0

스택 덤프를 처음 읽을 때 ThreadAbortException을 놓쳤습니다. 분석 결과가 정확합니다. – NotMe

+1

CommandTimeout 값을 더 큰 값으로 설정하는 동안 요청 스레드의 executionTimeout 값도 고려하십시오. 이 값을 초과하면 다른 threadabortexception으로 끝납니다. – Sunil