.NET Framework выполнение прервано при выполнении хранимой процедуры CLR? - PullRequest
1 голос
/ 04 мая 2010

Я создал хранимую процедуру, которая эквивалентна FOR XML AUTO в SQL Server 2008. Теперь, когда я тестирую ее, она выдает мне действительно бесполезное сообщение об ошибке. Что означает эта ошибка?

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...

Ответы [ 2 ]

3 голосов
/ 05 мая 2010

Обычно исключения прерывания потока, возникающие при заполнении ADO.NET DataSet / Table / Adapter, происходят из-за того, что запрос выполнялся дольше, чем время ожидания любых средств, использованных для извлечения данных.

В вашем случае похоже, что вы используете прямое соединение с SQL Server, поэтому я бы сказал, попробуйте установить для свойства CommandTimeout для вашей команды SQL достаточно большое значение, чтобы удовлетворить ваш запрос. Это или точная настройка запроса или даже архитектуры приложения для повышения производительности.

3 голосов
/ 05 мая 2010

Я почти уверен, что это означает, что вы сделали это неправильно ...

На другой ноте: похоже, вы заполняете таблицу данных. во время вызова он пытается преобразовать что-то в строковое значение .. и не удается.

Вам нужно будет посмотреть на столбцы, которые возвращаются, чтобы увидеть, есть ли один, который не может преобразовать в строковое представление. Возможно двоичное или нулевое значение, или что-то в этом роде.

...