1

我构建了一个与 SQL Server 2008 等效的存储过程FOR XML AUTO。现在我正在测试它,它给了我一个非常无用的错误消息。这个错误是什么意思?

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

2 回答 2

3

我很确定这意味着你做错了......

另一方面:看起来您正在填充数据表。在通话期间,它试图将某些内容转换为字符串值......但失败了。

您将不得不查看返回的列,以查看是否存在无法转换为字符串表示形式的列。也许是二进制或空值,或类似的东西。

于 2010-05-04T20:00:44.730 回答
3

通常,在 ADO.NET 数据集/表/适配器填充期间发生的线程中止异常是因为查询运行的时间超过了用于检索数据的任何方法的超时时间。

在您的情况下,您似乎正在使用直接 SQL Server 连接,因此我会说尝试将 SQL 命令的CommandTimeout属性设置为足够大的值以适应您的查询。或者微调查询甚至应用程序架构以获得更好的性能。

于 2010-05-05T19:15:23.667 回答