0

Ceci est mon DataAccessLayerindex hors d'exception de gamme en C#

public string GetMinISecPer(ISecuritySummmary iSecObj) 
     { 
      try 
      { 
       string miniSecPer = null; 
       SelectCommand cmd = new SelectCommand(SPConst.GetMinIsecPer); 
       cmd["@SubISUName"] = iSecObj.SubISUName; 
       using (DBDataReaderWrapper reader = cmd.Execute()) 
       { 
        while (reader.Read()) 
        { 
         double miniSecPercent = Convert.ToDouble(reader.String["testValue"]); 
         miniSecPer = Convert.ToString(miniSecPercent); 
        } 
       } 
       return miniSecPer; 
      } 
      catch (Exception e) 
      { 
       return ""; 
      } 
     } 

Ceci est ma procédure stockée

ALTER PROCEDURE [dbo].[GetMinIsecPer] 

@SubISUName varchar(max) 

AS 

BEGIN 
DECLARE @MinIsecPer float; 
DECLARE @testValue varchar(20); 
set @testValue='value'; 

set @MinIsecPer=(select MIN(iSecComplPer) from ISecurityStatistics IST 
left outer join Relationship R on R.Id=IST.RelationshipId 

left outer join SubISU SI on SI.Id=R.SubISUId 

where [email protected] and UploadedDate=(SELECT MAX(UploadedDate) FROM ISecurityStatistics)) 
set @testValue=(select cast(@MinIsecPer as varchar(20))) 

select cast(@testValue as varchar(20)) 
SELECT 
    SQL_VARIANT_PROPERTY(@testValue, 'BaseType'), 
    SQL_VARIANT_PROPERTY(@testValue, 'Precision'), 
    SQL_VARIANT_PROPERTY(@testValue, 'Scale'), 
    SQL_VARIANT_PROPERTY(@testValue, 'MaxLength') 
END 

et la sortie de mon SP est

(No column name) 
72 
(No column name) (No column name) (No column name) (No column name) 
varchar    0     0     20 

Dans ce SP iam obtenir le min% de la table ISecurityStatistics, subISU et Relationship sont des tables principales pour obtenir le subISUName qui iam passi ng en tant que paramètres.

mais DataAccessLayer iam obtenir erreur « Index hors exception gamme »

me aider gentiment à résoudre le problème .. merci d'avance ..

Répondre

4

Il est parce que vous essayez d'accéder à la valeur par son nom, même si aucun nom n'a été défini.

utiliser:

reader[0].ToString() 

Ou vous pouvez nommer la colonne:

select cast(@testValue as varchar(20)) As [testValue] 

Alors appelez ce que vous faites actuellement.

+0

merci beaucoup .. je l'ai eu ... – Mythily

+0

Si cela vous a aidé s'il vous plaît marquer comme la réponse :) –