класс чтения данных sql - PullRequest
       12

класс чтения данных sql

0 голосов
/ 27 ноября 2010

Я выполнил команду sql с SqlDataReader, но у меня была эта ошибка

System.IndexOutOfRangeException: имя пользователя

Событие загрузки страницы:

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 голосов
/ 27 ноября 2010

Измените вашу процедуру storder на:

Alter proc Total
as
begin
select Count (UserName) as UserName from Registration 
end
0 голосов
/ 27 ноября 2010

Вы не возвращаете ни один столбец с именем 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;
       }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...