2017-10-05 11 views
-1

J'ai une méthode qui renvoie un grand nombre de lignes à partir d'une base de données. (S'il vous plaît voir ci-dessous)La capacité ArrayList ne dépasse pas 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; 
    } 

Quand je lance cette méthode, je réalise que le nombre de custcol.InnerList est 32767 où il devait être autour de 34000. Puis je vis qu'il pénètre dans une exception. Le message d'erreur indique que "La valeur était trop grande ou trop petite pour un Int16."

Je crois que la capacité de cette liste est assignée comme int16 en quelque sorte. Quelqu'un peut-il m'aider à augmenter la capacité?

Merci

Edit: ici est la trace complète de la pile

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

Un DataTable peut contenir 16 777 216 lignes – Plutonix

+1

Êtes-vous sûr que c'est un problème avec 'ArrayList'? Votre implémentation de 'ACollection.ListFromReader' tente-t-elle d'assigner une grande valeur de colonne de 32 ou 64 bits à une propriété de 16 bits de' cust'? Ou peut-être assigner une valeur de colonne négative à une propriété 'ushort'? La possibilité de voir la totalité de la trace de pile de l'exception peut aider à la déterminer. – wablab

+0

Je doute de votre analyse. Mais ArrayList est à peu près obsolète de toute façon. Utilisez une liste à la place! – TaW

Répondre

0

Modifier le type de la variable qui vous donne des problèmes à Int32 ou Int64, vous sera en mesure d'insérer des nombres plus grands ou plus petits.