Извлечение pdf или doc файлов из базы данных sqldatabase
Я пытаюсь получить pdf или любой другой файл из базы данных sql,но получаю ошибку, индекс которой находится вне диапазона. Должен быть неотрицательным и меньше размера коллекции
Что я уже пробовал:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> <columns> <asp:BoundField DataField="Section" HeaderText="File Name" /> <asp:BoundField DataField="Category" HeaderText="File Name" /> <asp:TemplateField ItemStyle-HorizontalAlign="Center"> <itemtemplate> <asp:LinkButton ID="lnkView" OnClick="OpenDocument" runat="server" Text='<%# Eval("Link") %>'>
protected void OpenDocument(object sender, EventArgs e) { LinkButton lnk = (LinkButton)sender; GridViewRow gr = (GridViewRow)lnk.NamingContainer; if (gr.RowIndex > 0) { int id = int.Parse(GridView1.DataKeys[gr.RowIndex].Value.ToString()); Download(id); } } private void Download(int id) { DataTable dt = new DataTable(); string constr = ConfigurationManager.ConnectionStrings["IntranetConnectionString"].ConnectionString; using (SqlConnection con = new SqlConnection(constr)) { using (SqlCommand cmd = new SqlCommand()) { cmd.CommandText = "SELECT Seqn, Section, Category, Link from Links WHERE Seqn = @seqn "; cmd.Connection = con; cmd.Parameters.Add("@seqn", SqlDbType.Int).Value = id; con.Open(); SqlDataReader reader = cmd.ExecuteReader(); dt.Load(reader); } } string name = dt.Rows[0]["Category"].ToString(); byte[] documentBytes = (byte[])dt.Rows[0]["Link"]; Response.ClearContent(); Response.ContentType = "application/octetstream"; Response.AddHeader("Content-Disposition", string.Format("attachment; filename={}", name)); Response.AddHeader("Content-Length", documentBytes.Length.ToString()); Response.BinaryWrite(documentBytes); Response.Flush(); Response.Close(); } private void FillData() { DataTable dt = new DataTable(); string constr = ConfigurationManager.ConnectionStrings["IntranetConnectionString"].ConnectionString; using (SqlConnection con = new SqlConnection(constr)) { using (SqlCommand cmd = new SqlCommand()) { cmd.CommandText = "SELECT Seqn, Section, Category, Link from Links "; cmd.Connection = con; con.Open(); SqlDataReader reader = cmd.ExecuteReader(); dt.Load(reader); con.Close(); } if (dt.Rows.Count > 0) { GridView1.DataSource = dt; GridView1.DataBind(); } } }
Richard Deeming
Вы собирались сказать нам, из какой строки этого кода выбрасывается исключение?
Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)
Линия?
j snooze
Как получилось, что вы проверяете количество строк данных в FillData, но не загружаете, мне кажется, вы предполагаете, что данные возвращаются в методе загрузки и сообщают ему доступ к строке [0]...Если данных нет, то ваш индекс выходит за пределы. Просто мысль.
Karthik_Mahalingam
используйте отладчик, чтобы найти строку, в которой возникает ошибка