Я недавно унаследовал кодовый набор для принадлежащего мне продукта, который использует Subsonic 2.1.0 для доступа к данным.
Когда я приступаю к отладке указанного набора кодов, все, что я получаю в окне «Вывод» Visual Studio 2010, - это следующее (почти для каждого столбца каждого объекта, который пытается быть загружен):
A first chance exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll
Это блок кода, где он взрывается в Subsonic, который находится в классе SubSonic.RecordBase, который выглядит так:
/// <summary>
/// Loads the object with the current reader's values. Assumes the reader is already moved to
/// first position in recordset (aka has been "Read()")
/// </summary>
/// <param name="dataReader">The data reader.</param>
public virtual void Load(IDataReader dataReader)
{
foreach(TableSchema.TableColumn col in BaseSchema.Columns)
{
try
{
SetColumnValue(col.ColumnName, dataReader[col.ColumnName]);
}
catch(Exception)
{
// turning off the Exception for now
// to support partial loads
// throw new Exception("Unable to set column value for " + col.ColumnName + ": " + x.Message);
}
}
SetLoadState();
MarkClean();
}
Там есть оскорбительная строка:
SetColumnValue(col.ColumnName, dataReader[col.ColumnName]);
col.ColumnName на данный момент ничего не соответствует в dataReader. Как будто он использует старый / предыдущий dataReader для извлечения данных из.
Я надеюсь, что кто-то еще сталкивался с этой проблемой, поскольку я все еще довольно плохо знаком с Subsonic и в прошлом использовал только Hibernate для ORM.
Это происходит как на моей старой машине, так и на новой, только что созданной, причем обе версии работают под управлением Windows 7 Professional x64 с Visual Studio 2010 Professional в качестве IDE.
Я прошел через форумы, Google и многие другие сайты, но еще не нашел никого, кто сталкивался с этой проблемой.
Если требуется дополнительная информация, пожалуйста, дайте мне знать, и я буду рад опубликовать!
Заранее спасибо!