简体   繁体   English

C#中的索引超出范围异常

[英]index out of range exception in c#

This is my DataAccessLayer 这是我的DataAccessLayer

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 "";
            }
        }

This is my Stored Procedure 这是我的存储过程

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 SI.SubISUName=@SubISUName 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

and the output of my SP is 我的SP的输出是

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

In this SP iam getting the min% from the table ISecurityStatistics, subISU and Relationship are master tables to get the subISUName which iam passing as parameters to it. 在此SP iam中,从表ISecurityStatistics,minISU和Relationship中获取min%,这是主表,用于获取iam作为参数传递给它的subISUName。

but in DataAccessLayer iam getting error as "Index out of range exception" 但在DataAccessLayer中,iam出现错误,因为“索引超出范围异常”

Kindly help me out to fix the issue.. thanks in advance.. 请帮助我解决此问题..在此先感谢..

It's because you are trying to access the value by name even though no name has been set. 这是因为即使没有设置名称,您仍尝试按名称访问值。

Use either: 使用以下任一方法:

reader[0].ToString()

Or you could name the column: 或者,您可以将列命名为:

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

Then call what you currently do. 然后调用您当前的操作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM