sql数据读取器类

时间:2010-11-27 09:41:21

标签: asp.net sql

我用SqlDataReader做了sql命令,但我遇到了这个错误

  

System.IndexOutOfRangeException:UserName

页面加载事件:

protected void Page_Load(object sender, EventArgs e)
{
    using (SqlConnection con = Connection.GetConnection())
    {

        SqlCommand Com = new SqlCommand("Total", con);
        Com.CommandType = CommandType.StoredProcedure;
        SqlDataReader Dr = Com.ExecuteReader();
        if (Dr.Read())
        {
            string Result= Dr["UserName"].ToString();
            Lbltotal.Text = Result;
        }
    }
}

存储过程:

Alter proc Total
as
begin
select Count (UserName) from Registration 
end

2 个答案:

答案 0 :(得分:0)

您没有返回任何名为UserName的列 - 您只是返回一个没有明确列名的计数。

如果你有这样的东西 - 只有一个值 - 你也可以使用ExecuteScalar方法,它只返回一个值:

using(SqlCommand Com = new SqlCommand("Total", con))
{
    Com.CommandType = CommandType.StoredProcedure;

    int count = (int)Com.ExecuteScalar();
}

如果您坚持使用SqlDataReader,则只需使用位置参数:

using(SqlCommand Com = new SqlCommand("Total", con))
{
    Com.CommandType = CommandType.StoredProcedure;

    using(SqlDataReader Dr = Com.ExecuteReader())
    {
       if (Dr.Read())
       {
           string Result= Dr[0].ToString(); // take value no. 0 - the first one
           Lbltotal.Text = Result;
       }
    }
}

答案 1 :(得分:0)

将您的storder程序更改为:

Alter proc Total
as
begin
select Count (UserName) as UserName from Registration 
end