Ошибка: индекс выходит за пределы - PullRequest
0 голосов
/ 05 октября 2011
protected void btnDownload_Click(object sender, EventArgs e)
    {

        //to request the name of the event from the listbox from Main.aspx
        string EventName = Request.QueryString["ename"];

        //Select event id statement
        //const string S = "SELECT EventName FROM Event WHERE EventID = @EventID";
        const string q = "SELECT EventID from Event WHERE EventName = @EventName"; 
        string eventid = "";
        using (SqlConnection c = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=PSeminar;Integrated Security=true;Trusted_Connection=Yes;MultipleActiveResultSets=true"))
        using (SqlCommand Command = new SqlCommand(q, c))
        {
            Command.Parameters.AddWithValue("@EventName", EventName);

            c.Open();
            using (SqlDataReader rdr = Command.ExecuteReader())
                while (rdr.Read())
                {
                    Command.CommandText = "Select * from Attendance where EventID=@EventID";
                    System.Text.StringBuilder sb = new System.Text.StringBuilder();
                    sb.Append(String.Format("\"{0}\",\"{1}\", \"{2}\", \"{3}\", \"{4}\", \"{5}\", \"{6}\", \"{7}\"n",
               rdr[0], rdr[1], rdr[2], rdr[3], rdr[4], rdr[5], rdr[6], rdr[7]));
               // I have an error here(Index out of bound)

                    // to get event id from the Event name
                    eventid = rdr.GetString(0);
                    rdr.Close();
                    c.Close();

                    byte[] ar = System.Text.Encoding.UTF8.GetBytes(sb.ToString());
                    Response.ClearContent();
                    Response.ClearHeaders();
                    Response.AddHeader("Content.Type", "application/octet-stream");
                    Response.AddHeader("Content-Length", ar.Length.ToString());
                    Response.AddHeader("Content-Disposition", "attachment; filename=download.csv");
                    Response.BinaryWrite(ar);
                    Response.Flush();
                    Response.End();
                }

        }

Ошибка была - «Индекс находился за пределами массива». Я пытаюсь скачать файл в соответствии с событием. пока я сделал так много кодов. но я не понимаю, что означает ошибка. Пожалуйста, объясните мне, что означает ошибка "Индекс был за пределами массива", и, пожалуйста, дайте мне решения. спасибо

Ответы [ 4 ]

2 голосов
/ 05 октября 2011

вы пытаетесь получить доступ к 7 столбцам в этой строке, но у вас есть только 1 столбец (EventId).

Редактировать:

Вы не можете изменить командный текст команды, покачитая это.Ну, очевидно, вы можете, но вы не получите ожидаемых результатов.

1 голос
/ 05 октября 2011

Читатель содержит результат следующего оператора

SELECT EventID from Event WHERE EventName = @EventName

, а не для этого оператора

   Select * from Attendance where EventID=@EventID

Я бы заменил const string q на

 const string q = @" Select * from dbo.Attendance 
                  where EventID = (SELECT EventID from dbo.Event WHERE EventName = @EventName");

И вместо * я бы использовал имена столбцов по двум причинам: серверу баз данных он понравится больше, и вы будете уверены, какие столбцы у вас будут

0 голосов
/ 05 октября 2011

Индекс вне границ означает именно то, что вы пытаетесь получить доступ где-нибудь за концом массива.

Например:

var array = new[] {0, 1, 2};
var temp = array[10];

выбросит индекс за пределыисключение, потому что в позиции array нет позиции в позиции 10 (только 3 позиции и позиции 0, 1 и 2).

Этого должно быть достаточно для решения вашей проблемы.Если вы все еще застряли, дайте мне знать, и я посмотрю на ваш код.

0 голосов
/ 05 октября 2011

Эта ошибка может произойти, если вы прочитаете массив и запросите индекс, который больше или равен длине массива.Проверяет, имеет ли таблица, которую вы читаете, 8 полей или вы выбираете 8 полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...