none
升級為 SQL Server 2008之後, 主機的 .NET Framework 無法讀取 hierarchyid 的資料型態!? RRS feed

  • 一般討論

  • 升級為 SQL Server 2008 之後, 主機的 .NET Framework 無法讀取 hierarchyid 的資料型態!?
    但是同樣的程式在另外一台 IIS 與 SQL Server 2008 資料庫裝在一起的測試機上面卻完全沒有問題。

    測試機因為同時有安裝 SQL Server 2008, 所以資料讀取都沒有問題, 主機的資料庫與IIS則是分開2台安裝,
    不過主機在讀取資料, 填入DataSet時, 如果是沒有任何資料產生, 主機的程式庫仍會產生DataTable欄位,
    然後沒有任何資料列, 而且如果欄位值如果全部是Null時, 使用 SqlDataAdapter在Fill 資料集時,
    會產生 InvalidOperationException, 訊息為 DataReader.GetFieldType(8) 已傳回空值的錯誤
    (其中的8為第9個欄位, 為讀取欄位資料型態 dataReader.GetFieldType(i) 時, 因為該欄位值全部
    為Null, 取不到欄位資料型態而產生之錯誤), 而且主機也不支援讀取 SQL Server 2008 的新資料型態
    hierarchyid, 一樣出現 GetFieldType 的錯誤!

    不過這樣的錯誤訊息, 不會出現在測試機上面, 不知如何解這個錯誤!?

    ---------------- 補充說明 ----------------
    主機的環境 : IIS6 + 應用程式的 ASP.NET為 2.0
    主機的資料庫(在另一台機器): SQL Server 2008
    測試機的環境: Windows Server 2003 SP2 + IIS6 + SQL Server 2008
    應用程式的 ASP.NET為 2.0.50727

    ---------------- 如果上面看不懂的話 ----------------
    簡言之, 我就是在 ASP.NET 的程式裏面遇到讀取欄位值都是 Null 以及欄位型態是 hierarchyid 時, SqlDataAdapter在填入DataSet資料集會產生 DataReader.GetFieldType(8) 已傳回空值的錯誤, 這個問題不知道要如何解決!?
    是否是.Net Framework的某個Patch沒有上到!?

    主機產生的 Exception 如下:

    -----------------------------------
    [System.InvalidOperationException]DataReader.GetFieldType(8) 已傳回空值。
    -----------------------------------
    System.InvalidOperationException: DataReader.GetFieldType(8) 已傳回空值。
    於 System.Data.ProviderBase.SchemaMapping.SetupSchemaWithoutKeyInfo(MissingMappingAction mappingAction, MissingSchemaAction schemaAction, Boolean gettingData, DataColumn parentChapterColumn, Object chapterValue)
    於 System.Data.ProviderBase.SchemaMapping..ctor(DataAdapter adapter, DataSet dataset, DataTable datatable, DataReaderContainer dataReader, Boolean keyInfo, SchemaType schemaType, String sourceTableName, Boolean gettingData, DataColumn parentChapterColumn, Object parentChapterValue)
    於 System.Data.Common.DataAdapter.FillMappingInternal(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 schemaCount, DataColumn parentChapterColumn, Object parentChapterValue)
    於 System.Data.Common.DataAdapter.FillMapping(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 schemaCount, DataColumn parentChapterColumn, Object parentChapterValue)
    於 System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
    於 System.Data.Common.DataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
    於 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    於 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    於 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
    於 ASP.testhierarchyid_aspx.__Renderform1(HtmlTextWriter __w, Control parameterContainer)
    於 System.Data.ProviderBase.SchemaMapping.SetupSchemaWithoutKeyInfo(MissingMappingAction mappingAction, MissingSchemaAction schemaAction, Boolean gettingData, DataColumn parentChapterColumn, Object chapterValue)
    於 System.Data.ProviderBase.SchemaMapping..ctor(DataAdapter adapter, DataSet dataset, DataTable datatable, DataReaderContainer dataReader, Boolean keyInfo, SchemaType schemaType, String sourceTableName, Boolean gettingData, DataColumn parentChapterColumn, Object parentChapterValue)
    於 System.Data.Common.DataAdapter.FillMappingInternal(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 schemaCount, DataColumn parentChapterColumn, Object parentChapterValue)
    於 System.Data.Common.DataAdapter.FillMapping(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 schemaCount, DataColumn parentChapterColumn, Object parentChapterValue)
    於 System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
    於 System.Data.Common.DataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
    於 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    於 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    於 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
    於 ASP.testhierarchyid_aspx.__Renderform1(HtmlTextWriter __w, Control parameterContainer)

    • 已編輯 aliceyeh 2009年4月30日 上午 03:38
    • 已變更類型 Alex ChuoModerator 2009年6月4日 下午 12:50 未能提供詳盡資訊,以利判別原因
    2009年4月29日 上午 10:06

所有回覆

  • 看不懂,請做明確描述。

    1. 到底是哪台升級還是全部升級?
    2. 何謂同步?兩台 SQL Server 做鏡象備份還是?
    3. IIS 那台用的連線程式有安裝 SQL Server 2008 新版的嗎?連線字串是否有變更?
    4. 一堆主機重複出現,請用代號,例如 Server A, B, C ,再分別描述 A, B, C 的任務及安裝的環境,根本看不懂你所稱的主機跟測試機的差異。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年4月29日 上午 10:09