【问题标题】:Index out of range exception in SqlDataReaderSqlDataReader 中的索引超出范围异常
【发布时间】:2016-01-08 15:02:59
【问题描述】:

每当我尝试在我的 ASP.NET MVC 项目中使用“在浏览器中查看”选项时,我都会在 SqlDataReader 中收到错误“索引超出范围”。

这是我的SqlDataReader的代码:

public List<User> View(ActivityMode a)
{
        SqlConnection con = ConnectionDAL.SQL();

        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "Sp_UserReg";
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.AddWithValue("@Activity", a.ToString());

        List<User> lst = null;

        con.Open();

        using (con)
        {
            SqlDataReader DR =cmd.ExecuteReader();

            if (DR.HasRows)
            {
                lst = new List<User>();

                while (DR.Read())
                {
                    User obj = new User();
                    obj.Id = Convert.ToInt32(DR["@Id"]);
                    obj.DOB = Convert.ToDateTime(DR["@DOB"]);
                    obj.EmailAddress = DR["@EmailAddress"].ToString();
                    obj.FirstName = DR["@FirstName"].ToString();
                    obj.LastName = DR["@LastName"].ToString();
                    obj.Password = DR["@Password"].ToString();
                    obj.SecurityAnswer = DR["SecurityAnswer"].ToString();
                    obj.SecurityQuestion = DR["@SecurityAnswer"].ToString();

                    lst.Add(obj);
                }

                lst.TrimExcess();
            }

            return lst;
        }
    }       
}        

代码进入 while 语句,当它到达 Id 列时,它会抛出错误。我也尝试评论 Id,但它在下一列给我错误。

这是数据库中的查询:

ALTER Procedure [dbo].[Sp_UserReg]
    (@Id int = null,
     @FullName varchar(100) = null,
     @Password varchar(50) = null,
     @EmailAddress varchar(50) = null,
     @DOB datetime = null,
     @SecurityQuestion varchar(100) = null,
     @SecurityAnswer varchar(100) = null,
     @Activity varchar(50) = null)
AS BEGIN
    IF(@Activity = 'Add')
        INSERT INTO UserReg (FullName,[Password], EmailAddress, SecurityQuestion, SecurityAnswer, DOB)
        VALUES (@FullName, @Password, @EmailAddress, @SecurityQuestion, @SecurityAnswer, @DOB)

    IF(@Activity = 'Delete')
        DELETE FROM UserReg 
        WHERE id = @id

    IF(@Activity = 'View')
        SELECT * 
        FROM [UserReg]

    IF(@Activity = 'Update')
        UPDATE UserReg 
        SET FullName = @fullName,
            [Password] = @Password,
            EmailAddress = @EmailAddress

    IF(@Activity = 'ViewById')
        SELECT * 
        FROM UserReg 
        WHERE Id = @Id
End

【问题讨论】:

标签: sql-server stored-procedures ado.net indexoutofrangeexception


【解决方案1】:

在使用数据阅读器引用字段时,您应该去掉 @ 符号。

【讨论】:

    猜你喜欢
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2011-12-25
    • 2023-04-10
    相关资源
    最近更新 更多