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
Eine DataTable kann 16.777.216 Zeilen enthalten – Plutonix
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
Ich bezweifle deine Analyse. Aber ArrayList ist sowieso ziemlich veraltet. Verwenden Sie stattdessen eine Liste! –
TaW