Прогнал ODP юнит-тесты на Oracle.DataAcces, Version=2.111.7.20
Собирал BLToolkit из SVN, но около месяца назад.
Есть кучка отвалившихся тестов, в частности, меня задевают вот эти: TestDataSet и подобные.
Валятся с ошибкой:
Mapping.ResultSetTest.TestDataSet:
BLToolkit.Data.DataException : Unable to cast object of type 'Oracle.DataAccess.Client.OracleDataReader' to type 'Oracle.DataAccess.Types.OracleRefCursor'.
----> System.InvalidCastException : Unable to cast object of type 'Oracle.DataAccess.Client.OracleDataReader' to type 'Oracle.DataAccess.Types.OracleRefCursor'.
Как мне кажется, причина в ребятах из Орыкла, но все же хотелось бы знать наверняка
И если можно, как эту проблему забороть. Может быть, откатится на более раннюю версию ODP.NET, с которой BLToolkit умеет дружить?
Здравствуйте, krserg, Вы писали:
K>Мы путем эксперементов у себя победили эту проблему забив такой "костыль": K>класс ODPDataProvider, метод CloneParameter(IDbDataParameter parameter)
K>
K> if (((OracleParameter)parameter).OracleDbType == OracleDbType.RefCursor)
K> {
K> OracleParameter op = new OracleParameter(parameter.ParameterName, OracleDbType.RefCursor);
K> op.Direction = parameter.Direction;
K> return op;
K> }
K>
K>Отказываться не собираемся, т.к. ODP стало реально быстрее!
Спасибо, но пока суть да дело, вернулся к провайдеру от мелкософта.
Здравствуйте, Spaider, Вы писали:
S>Прогнал ODP юнит-тесты на Oracle.DataAcces, Version=2.111.7.20
S>
S>Mapping.ResultSetTest.TestDataSet:
S>BLToolkit.Data.DataException : Unable to cast object of type 'Oracle.DataAccess.Client.OracleDataReader' to type 'Oracle.DataAccess.Types.OracleRefCursor'.
---->> System.InvalidCastException : Unable to cast object of type 'Oracle.DataAccess.Client.OracleDataReader' to type 'Oracle.DataAccess.Types.OracleRefCursor'.
S>
S>Как мне кажется, причина в ребятах из Орыкла, но все же хотелось бы знать наверняка
Здравствуйте, krserg, Вы писали:
K>Мы путем эксперементов у себя победили эту проблему забив такой "костыль": K>класс ODPDataProvider, метод CloneParameter(IDbDataParameter parameter)
Костыль действительно решает ошибку каста. Но вместо нее появляется другая. А именно:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at Oracle.DataAccess.Client.OpsDac.Read(IntPtr opsConCtx, IntPtr opsErrCtx, IntPtr opsSqlCtx, IntPtr& opsDacCtx, OpoSqlValCtx* pOpoSqlValCtx, OpoMetValCtx* pOpoMetValCtx, OpoDacValCtx* pOpoDacValCtx)
at Oracle.DataAccess.Client.OracleDataReader.Read()
at BLToolkit.Mapping.DataReaderListMapper.SetNextDataSource(InitContext initContext) in C:\Projects\spt_tst\bltoolkit\Mapping\DataReaderListMapper.cs:line 22
at BLToolkit.Mapping.MappingSchema.MapSourceListToDestinationList(IMapDataSourceList dataSourceList, IMapDataDestinationList dataDestinationList, Object[] parameters) in C:\Projects\spt_tst\bltoolkit\Mapping\MappingSchema.cs:line 1790
at BLToolkit.Mapping.MappingSchema.MapDataReaderToList(IDataReader reader, IList list, Type destObjectType, Object[] parameters) in C:\Projects\spt_tst\bltoolkit\Mapping\MappingSchema.cs:line 3079
at BLToolkit.Mapping.MappingSchema.MapDataReaderToResultSet(IDataReader reader, MapResultSet[] resultSets) in C:\Projects\spt_tst\bltoolkit\Mapping\MappingSchema.cs:line 3745
at BLToolkit.Data.DbManager.ExecuteResultSet(MapResultSet[] resultSets) in C:\Projects\spt_tst\bltoolkit\Data\DbManager.cs:line 4053
at spt.DataAccessLayer.MessageAccessor.GetMessageForView(DbManager db, Int64 msgID, Int64 userID, Int32 msgCnt, List`1& listFileInfo, List`1& listLot, SpecializedOrganization& specializedOrganization, List`1& listActionsHistory) in C:\Projects\spt_tst\spt.DataAccessLayer\MessageAccessor.cs:line 499
at spt.DataAccessLayer.MessageDAL.GetMessageForView(DbManager db, Int64 msgID, Int64 userID, Int32 msgCnt, List`1& listFileInfo, List`1& listLot, SpecializedOrganization& specializedOrganization, List`1& listActionsHistory) in C:\Projects\spt_tst\spt.DataAccessLayer\MessageDAL.cs:line 515
at spt.DataAccessLayer.MessageDAL.GetMessageForView(Int64 msgID, Int64 userID, Int32 msgCnt, List`1& listFileInfo, List`1& listLot, SpecializedOrganization& specializedOrganization, List`1& listActionsHistory) in C:\Projects\spt_tst\spt.DataAccessLayer\MessageDAL.cs:line 560
at Anonym.BargainingViewer.FillAndValidateData() in c:\Projects\spt_tst\spt\anonym\bargainingviewer.aspx.cs:line 143
at Anonym.BargainingViewer.Page_PreRender(Object sender, EventArgs e) in c:\Projects\spt_tst\spt\anonym\bargainingviewer.aspx.cs:line 69
Здравствуйте, Блудов Павел, Вы писали:
БП>Правильный ответ — откатиться обратно на 11.1.0.6
БП>От себя добавлю, что ошибка только в x86 версии, сборка для X64 работает нормально.
А что делать если продакшн Windows server 2008 R2, на него устанавливается только
Oracle Data Provider for .NET 2.0 11.1.0.7.20, в котором как раз все эти проблемы