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();
}
}
错误是 - “索引超出了数组的范围。” 我正在尝试根据事件下载文件。到目前为止,我已经完成了这么多代码。但我不明白这个错误意味着什么。请向我解释错误“索引超出数组范围意味着什么”,请给我解决方案。感谢
答案 0 :(得分:2)
您尝试访问该行中最多7列,但您只有1列(EventId)。
编辑:
在读取命令时,无法更改命令的命令文本。好吧,显然你可以,但你不会得到预期的结果。
答案 1 :(得分:1)
读者包含以下声明的结果
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");
而不是*我会使用列名,原因有两个:数据库服务器会更喜欢它,你会确定你将拥有哪些列
答案 2 :(得分:0)
如果您读取数组并要求索引大于或等于数组的长度,则可能会发生此错误。检查您正在阅读的表格是否有8个字段,或者您是否选择了8个字段。
答案 3 :(得分:0)
索引越界意味着你正试图访问超出数组末尾的某个地方。
e.g:
var array = new[] {0, 1, 2};
var temp = array[10];
会抛出索引越界异常,因为array
中的位置10没有项目(它只有3个项目,所以位置0,1和2)。
这应该足以让您尝试解决问题。如果您仍然被卡住,请告诉我,我会查看您的代码。