0

這是我的DataAccessLayer索引超出範圍例外的在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 ""; 
      } 
     } 

這是我的存儲過程

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 

和我的SP的輸出

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

在該SP iam從表中獲取最小百分比ISecurityStatistics,subISU和Relationship是主表獲得subisuname我i passi ng作爲參數。

但DataAccessLayer IAM得到錯誤的「索引超出範圍異常」

請幫我解決這個問題。在此先感謝..

回答

4

這是因爲您要訪問的值即使沒有設置名稱,也可以通過名稱。

二者必選其一:

reader[0].ToString() 

或者你也可以命名列:

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

然後打電話給你目前做什麼。

+0

非常感謝你..我明白了...... – Mythily

+0

如果有幫助,請將它標記爲答案:) –