2011-10-11 11 views
0

私は最近、私が現在所有しているデータセットのコードセットを継承し、Subsonic 2.1.0を使用してデータアクセスを実行しました。SubSonic throw 'System.IndexOutOfRangeException' Visual Studioデバッグモードの場合

私はデバッグに行くコードセットは、私は、Visual Studio 2010の出力ウィンドウに取得することすべてが(ほとんどのためにすべてのオブジェクトのすべての列がロードされるようにしようとして)、次のされて、言った:

A first chance exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll 

これはそうのように見えた、それは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、および他の多くのサイトを見てきましたが、まだこの問題に遭遇している他の人は見つけていません。

さらに詳しい情報が必要な場合は、私にお知らせください。私は投稿して嬉しいです!

ありがとうございます!

  • ジャスティン

答えて

0

DBスキーマが最後に作成亜音速のオブジェクト以降に変更されたことのように見えます。

+0

ありがとう!:)私は(亜音速のビルドプロバイダーを使用していない)SubCommanderを使用して、同様に再生成DALを試してみたが、そこにも無駄に。 : - /私はまだフォーラムや何を掘り下げているのか分かりませんが、SubSonicのソースコードを付けてステップスルーしようとしています(VSデバッガが一度動作することを決めた場合) – Justin

1

この問題をもう少し見てから、特定のフィールドだけがデータベースから取得され、データにマッピングされているときに、データオブジェクトを「部分的に読み込む」ためにこれらの例外を意図的に投げていることに気付きました。オブジェクト自体。 (例えば、単に例外自体をsupressesし、それが適切に列のデータをマップすることができない場合が再開されます。

わからない、これはもともと私の前にそれらによって導入された亜音速のコードか何かの一部であった場合。

感謝を再び!

ジャスティン

返信用
関連する問題