2017-10-05 2 views
-1

Ich habe eine Methode, die eine große Anzahl von Zeilen aus einer Datenbank zurückgibt. (Bitte beachten Sie folgende)ArrayList Kapazität überschreitet nicht 32768

public static ACollection GetListFromDatabase(string customername) 
    { 
     DBFactory factory = DBFactory.Instance; 
     ACollection custcol = new ACollection(); 
     //This is a collection class extended from System.Collections.CollectionBase 

     System.Data.IDataReader reader = null; 

     try 
     { 
      reader = factory.GPDb.ExecuteReader("spGetCustomerInfo", customernumber); 
      while (reader.Read()) 
      { 
       ACollection cust = ACollection.ListFromReader(reader); // returns info and assign it to ACollection object. 
       custcol.InnerList.Add(cust); 
      } 
     } 
     catch (Exception e) 
     { 
      String error = e.Message; 
     } 
     finally 
     { 
      if (reader != null) 
       reader.Close(); 
     } 
     return custcol; 
    } 

Wenn ich diese Methode ausführen, ich diese Zahl custcol.InnerList realisiert ist 32767, wo es sein soll um 34000. Dann sah ich, dass es in Ausnahme bekommt.

Die Fehlermeldung besagt, dass "Wert für ein Int16 entweder zu groß oder zu klein war".

Ich glaube, die Kapazität dieser Arraylist wird irgendwie int16 zugeordnet. Kann mir jemand helfen, die Kapazität zu erhöhen?

Dank

Edit: Hier ist die vollständige Stack-Trace

at System.Convert.ToInt16(Int64 value) 
    at System.Int64.System.IConvertible.ToInt16(IFormatProvider provider) 
    at System.Convert.ToInt16(Object value) 
    at Quest___Shared.CustomerCrossReference.ListFromReader(IDataReader reader) in C:\vsproject\CustomerCrossReference.cs:line 105 
    at Quest___Shared.ACollection.GetListFromDatabase(String customernumber) in C:\vsproject\ACollection.cs:line 88 

Full exception screen

+0

Eine DataTable kann 16.777.216 Zeilen enthalten – Plutonix

+1

Sind Sie sicher, dass es ein Problem mit 'ArrayList' ist? Versucht Ihre Implementierung von 'ACollection.ListFromReader' einen großen 32- oder 64-Bit-Spaltenwert einer 16-Bit-Eigenschaft von 'cust' zuzuweisen? Oder vielleicht ein negativer Spaltenwert zu einer 'ushort' Eigenschaft? Die Möglichkeit, die gesamte Stack-Ablaufverfolgung der Ausnahmebedingung zu sehen, könnte helfen, dies zu ermitteln. – wablab

+0

Ich bezweifle deine Analyse. Aber ArrayList ist sowieso ziemlich veraltet. Verwenden Sie stattdessen eine Liste ! – TaW

Antwort

0

Ändern Sie den Typ der Variablen, die Sie Probleme Int32 oder Int64 schenkt man dann kann größere oder kleinere Nummern einfügen.