none
Archivo en fileupload se guarda en bd de manera incorrecta RRS feed

  • Pregunta

  • En mi  formulario tengo 2 fileupload donde guardo mis archivos segun el mes , cuando yo guardo los 2 archivos en los meses respectivos estos se almacenan en mi bd de manera correcta (archivo1=mes1,archivo2=mes2) . Pero cuando solo guardo el archivo en el segundo mes .. este me guarda en el primer mes pero no en el segundo mes... Como puedo hacer para que mi archivo ya sea que este en el segundo o tercer mes.. se guarde en el mes correcto y no en el primer mes...

        Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnupload.Click
            Dim fechaini As Date = DateTime.Parse(lblini.Text)
            Dim fechafin As Date = DateTime.Parse(lblfin.Text)
            Dim cmeses2 = MonthDifference(fechafin, fechaini)
            For i As Integer = 1 To cmeses2
                For Each item As RepeaterItem In rpt.Items
    
                    Dim filemen As FileUpload = DirectCast(item.FindControl("FileUpload1"), FileUpload)
                    If filemen.HasFile Then
                        Dim Extension As String
                        Extension = System.IO.Path.GetExtension(filemen.FileName)
    
                        If Extension.ToLower <> ".gif" And Extension.ToLower <> ".png" And Extension.ToLower <> ".jpg" And Extension.ToLower <> ".jpeg" And Extension.ToLower <> ".pdf" Then
                            ScriptManager.RegisterStartupScript(Me, Me.GetType(), "popup", "alert('Formato de archivo invalido, suba archivos con formato PDF o imagen')", True)
    
                        Else
                            Dim FileSize As Integer
                            FileSize = filemen.PostedFile.ContentLength
    
                            If FileSize > 3145728 Then
    
                                ScriptManager.RegisterStartupScript(Me, Me.GetType(), "popup", "alert('El tamaño maximo de archivo a subir es de 3 Mb')", True)
                            Else
    
                                Dim indicador As New List(Of RowData)
                                indicador.Add(New RowData() With {.Seq = i})
    
                                Dim tiposeguimientom As String
    
                                Dim annomes As String
                                annomes = Date.Now.ToString("yyyyMM")
                                Dim filename As String = annomes + "_" + lblescuela.Text + "_" + lblidpractica.Text + "_" + "FM" + i.ToString + Extension
                                Dim filename1 As String = annomes + "_" + lblescuela.Text + "_" + lblidpractica.Text + "_" + "FM" + i.ToString
    
                                filemen.SaveAs("\\192.168.1.206\docsopp$\FichaMensual\" & filename)
    
                                If i > 5 Then
                                    tiposeguimientom = "0201-" + (i + 4).ToString
                                Else
                                    tiposeguimientom = "0201-0" + (i + 4).ToString
                                End If
    
                                con.Open()
    
                                Dim cmd As New SqlCommand("update [OPP].[tblSeguimiento] set nombreArchi=@Name,rutaArchi=@Path,fechaReDocu=@fecha  where idPracti=@Codigo and idTiSegui= @idTiSegui ", con)
                                cmd.Parameters.AddWithValue("@Codigo", lblidpractica.Text)
                                cmd.Parameters.AddWithValue("@idTiSegui", tiposeguimientom)
                                cmd.Parameters.AddWithValue("@Name", filename1)
                                cmd.Parameters.AddWithValue("@Path", "\\192.168.1.206\docsopp$\FichaMensual\" + filename)
                                cmd.Parameters.AddWithValue("@fecha", DateTime.Now)
    
                                cmd.ExecuteNonQuery()
                                con.Close()
    
                                i = i + 1
                            End If
                        End If
                    Else
                     End If
                Next
            Next
    
            Response.Redirect("~/Modalidades/Estado/EsFichaMensual.aspx")
    End Sub
    
     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not IsPostBack Then
                leerdatossolicitud()
                leerescuela()
                leerfechas()
                Dim fechaini As Date = DateTime.Parse(lblini.Text)
                Dim fechafin As Date = DateTime.Parse(lblfin.Text)
                Dim cmeses = MonthDifference(fechafin, fechaini)
                Dim dataSource As New List(Of RowData)
              
    
                For I As Integer = 1 To cmeses
    
             dataSource.Add(New RowData() With {.Seq = I})
    
                Next
    
                Me.rpt.DataSource = dataSource
                Me.rpt.DataBind()
    End Sub

    codigo

    <asp:Repeater ID="rpt" runat="server">
                  <HeaderTemplate>
                      <table>
                  </HeaderTemplate>
                  <ItemTemplate>
                      <tr>
                    <td> <asp:Label ID="indice" runat="server" Text ='<%#Eval("Seq")%>' Width="10px"></asp:Label></td>&nbsp;&nbsp;&nbsp;&nbsp;
                          <td><asp:FileUpload ID="FileUpload1" runat="server" /> </td>
                                  </tr>
                  </ItemTemplate>
                  <FooterTemplate>
                      </table></FooterTemplate>
              </asp:Repeater>


    • Editado fredsale viernes, 13 de marzo de 2015 15:43
    viernes, 13 de marzo de 2015 15:42

Respuestas

  • Te muestra algún error en la consola del explorador. Revisa, puede ser error de javascript.  Con F12 puedes abrir las herramientas del explorador (Chrome, Firefox, IE) para reivsar si manda alguna error.

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Saludos

    • Marcado como respuesta fredsale viernes, 13 de marzo de 2015 19:34
    viernes, 13 de marzo de 2015 18:44

Todas las respuestas

  • Hola.

    Parece que el problema es el for que tienes antes de recorrer los elementos del repeater. Lo tienes de 1 a 2; entonces recorres el repeater dos veces y por eso se guarda el archivo cunado i = 1, y cuando es = 2.

    Creo que deberías de poder identificar a que mes corresponde cada fileupload, puedes ponerle un identificador en la propiedad tooltip, y solo si corresponde al mes en cuestión lo guardo, sino es el mismo que no lo haga.

    Espero que te ayude.

    Saludos.

    viernes, 13 de marzo de 2015 16:12
  • Es que solo hay control fileupload y este se crea dentro del repeater dependiendo de la cantidad de meses... no podria poner un tooltip en el fileupload del mes 2 ... por que solo hay un fileupload
    viernes, 13 de marzo de 2015 16:15
  • Hola

    Si puedes agregarlo, porque el repeater hace iteraciones, puedes obtener el indice de esta manerea

    <%# Container.ItemIndex + 1 %>

    Así se lo puedes poner al ToolTip='<%# Container.ItemIndex + 1%>'. Y cada fileupload tendara un tooltip diferente. 

    viernes, 13 de marzo de 2015 16:20
  • hola

    como asocias un archivo a un mes ? o es el concepto de secuencial el que marca el mes

    en ese caso en la tabla tblSeguimiento deberias reflejar ese secuencial, osea debes persistirlo porque es parte de tu informacion

    la posicion del registro no indica en que mes se asigno, porque podrias aplciar un ORDER BY en la query y tendria un problema

    Dim query As String = "update [OPP].[tblSeguimiento] set Mes= @mes, nombreArchi=@Name,rutaArchi=@Path,fechaReDocu=@fecha where idPracti=@Codigo and idTiSegui= @idTiSegui "
    Dim cmd As New SqlCommand(, con)
    cmd.Parameters.AddWithValue("@mes", ...) //aqui el secuencial
    cmd.Parameters.AddWithValue("@Name", filename1)
    cmd.Parameters.AddWithValue("@Path", "\\192.168.1.206\docsopp$\FichaMensual\" + filename)
    cmd.Parameters.AddWithValue("@fecha", DateTime.Now)
    cmd.Parameters.AddWithValue("@Codigo", lblidpractica.Text)
    cmd.Parameters.AddWithValue("@idTiSegui", tiposeguimientom)

    si registras el mes al mostrarlo podrias darle un orden a los datos por ese campo he insertar un registro con mes 2 sin que tengas el 1

    en el codigo veo el UPDATE, pero el INSERT donde los realizas ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 13 de marzo de 2015 16:36
  • Ya lo intente Norberto pero me sigue con lo mismo parece que no reconociera el tooltip...

     Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnupload.Click
            Dim fechaini As Date = DateTime.Parse(lblini.Text)
            Dim fechafin As Date = DateTime.Parse(lblfin.Text)
            Dim cmeses2 = MonthDifference(fechafin, fechaini)
            For i As Integer = 1 To cmeses2
                For Each item As RepeaterItem In rpt.Items
    
                    Dim filemen As FileUpload = DirectCast(item.FindControl("FileUpload1"), FileUpload)
                    If filemen.HasFile Then
                        Dim Extension As String
                        Extension = System.IO.Path.GetExtension(filemen.FileName)
    
                        If Extension.ToLower <> ".gif" And Extension.ToLower <> ".png" And Extension.ToLower <> ".jpg" And Extension.ToLower <> ".jpeg" And Extension.ToLower <> ".pdf" Then
                            ScriptManager.RegisterStartupScript(Me, Me.GetType(), "popup", "alert('Formato de archivo invalido, suba archivos con formato PDF o imagen')", True)
                        Else
                            Dim FileSize As Integer
                            FileSize = filemen.PostedFile.ContentLength
    
                            If FileSize > 3145728 Then
                                ScriptManager.RegisterStartupScript(Me, Me.GetType(), "popup", "alert('El tamaño maximo de archivo a subir es de 3 Mb')", True)
                            Else
    
                          
    
                                Dim tiposeguimientom As String
    
                                Dim annomes As String
                                annomes = Date.Now.ToString("yyyyMM")
                                Dim filename As String = annomes + "_" + lblescuela.Text + "_" + lblidpractica.Text + "_" + "FM" + i.ToString + Extension
                                Dim filename1 As String = annomes + "_" + lblescuela.Text + "_" + lblidpractica.Text + "_" + "FM" + i.ToString
    
                                filemen.SaveAs("\\192.168.1.206\docsopp$\FichaMensual\" & filename)
    
                                If i > 5 Then
                                    tiposeguimientom = "0201-" + (i + 4).ToString
                                Else
                                    tiposeguimientom = "0201-0" + (i + 4).ToString
                                End If
    
                                If filemen.ToolTip = i Then
    
    
                                    con.Open()
    
                                    Dim cmd As New SqlCommand("update [OPP].[tblSeguimiento] set nombreArchi=@Name,rutaArchi=@Path,fechaReDocu=@fecha  where idPracti=@Codigo and idTiSegui= @idTiSegui ", con)
                                    cmd.Parameters.AddWithValue("@Codigo", lblidpractica.Text)
                                    cmd.Parameters.AddWithValue("@idTiSegui", tiposeguimientom)
                                    cmd.Parameters.AddWithValue("@Name", filename1)
                                    cmd.Parameters.AddWithValue("@Path", "\\192.168.1.206\docsopp$\FichaMensual\" + filename)
                                    cmd.Parameters.AddWithValue("@fecha", DateTime.Now)
    
                                    cmd.ExecuteNonQuery()
                                    con.Close()
                                End If
                                i = i + 1
                            End If
                        End If
                    Else
             
                    End If
                Next
            Next
    
            Response.Redirect("~/Modalidades/Estado/EsFichaMensual.aspx")
    
    End Sub
    

    <asp:Repeater ID="rpt" runat="server">
                  <HeaderTemplate>
                      <table>
                  </HeaderTemplate>
                  <ItemTemplate>
                      <tr>
                             <td><asp:Label ID="indice" runat="server" Text ='<%#Eval("Seq")%>' Width="10px"></asp:Label>&nbsp;&nbsp;</td>
                                          <td><asp:FileUpload ID="FileUpload1" runat="server" ToolTip='<%# Container.ItemIndex + 1%>' /> </td>
                              
                         </tr>
    
    
                  </ItemTemplate>
                  <FooterTemplate>
                      </table></FooterTemplate>
              </asp:Repeater>
    


    viernes, 13 de marzo de 2015 18:08
  • No veo que compares el ToolTip con el indice del For. Debería de ser que filemen.HasFile and i = CType(filemen.ToolTip, Int)

    Así solo entrará cuando tenga archivo y corresponda al mes según tu for. Intenta poner un punto de intrrupción en ese IF para ver si el toolTip trae valor y corresponde.

    Saludos.

    viernes, 13 de marzo de 2015 18:20
  • Tienes razon Norberto me desespere un poco ... ahora tengo esta duda porque a pesar que tengo validaciones sobre el tipo de archivo y tambien el tamaño de archivo a insertar en el fileupload... No me sale ningun error a la hora de insertar por ejemplo un archivo de formato .rar ... claro en realidad no lo llega a insertar pero tampoco  me sale los avisos que tengo de validacion... y eso q ninguno de ellos esta comentado...

    Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnupload.Click
            Dim fechaini As Date = DateTime.Parse(lblini.Text)
            Dim fechafin As Date = DateTime.Parse(lblfin.Text)
            Dim cmeses2 = MonthDifference(fechafin, fechaini)
            For i As Integer = 1 To cmeses2
                For Each item As RepeaterItem In rpt.Items
    
                    Dim filemen As FileUpload = DirectCast(item.FindControl("FileUpload1"), FileUpload)
                    If filemen.HasFile And i = CType(filemen.ToolTip, Integer) Then
                        Dim Extension As String
                        Extension = System.IO.Path.GetExtension(filemen.FileName)
    
                        If Extension.ToLower <> ".gif" And Extension.ToLower <> ".png" And Extension.ToLower <> ".jpg" And Extension.ToLower <> ".jpeg" And Extension.ToLower <> ".pdf" Then
                            ScriptManager.RegisterStartupScript(Me, Me.GetType(), "popup", "alert('Formato de archivo invalido, suba archivos con formato PDF o imagen')", True)
                            
                        Else
                            Dim FileSize As Integer
                            FileSize = filemen.PostedFile.ContentLength
    
                            If FileSize > 3145728 Then
                                                           ScriptManager.RegisterStartupScript(Me, Me.GetType(), "popup", "alert('El tamaño maximo de archivo a subir es de 3 Mb')", True)
                            Else
    
    
    
                                Dim tiposeguimientom As String
    
                                Dim annomes As String
                                annomes = Date.Now.ToString("yyyyMM")
                                Dim filename As String = annomes + "_" + lblescuela.Text + "_" + lblidpractica.Text + "_" + "FM" + i.ToString + Extension
                                Dim filename1 As String = annomes + "_" + lblescuela.Text + "_" + lblidpractica.Text + "_" + "FM" + i.ToString
    
    
    
    
    
                                filemen.SaveAs("\\192.168.1.206\docsopp$\FichaMensual\" & filename)
    
                                If i > 5 Then
                                    tiposeguimientom = "0201-" + (i + 4).ToString
                                Else
                                    tiposeguimientom = "0201-0" + (i + 4).ToString
                                End If
    
                                con.Open()
    
                                Dim cmd As New SqlCommand("update [OPP].[tblSeguimiento] set nombreArchi=@Name,rutaArchi=@Path,fechaReDocu=@fecha  where idPracti=@Codigo and idTiSegui= @idTiSegui ", con)
                                cmd.Parameters.AddWithValue("@Codigo", lblidpractica.Text)
                                cmd.Parameters.AddWithValue("@idTiSegui", tiposeguimientom)
                                cmd.Parameters.AddWithValue("@Name", filename1)
                                cmd.Parameters.AddWithValue("@Path", "\\192.168.1.206\docsopp$\FichaMensual\" + filename)
                                cmd.Parameters.AddWithValue("@fecha", DateTime.Now)
    
                                cmd.ExecuteNonQuery()
                                con.Close()
    
                                i = i + 1
                            End If
                        End If
                    Else
                        
                    End If
                Next
            Next
    
            Response.Redirect("~/Modalidades/Estado/EsFichaMensual.aspx")
    End Sub


    • Editado fredsale viernes, 13 de marzo de 2015 18:36
    viernes, 13 de marzo de 2015 18:35
  • Te muestra algún error en la consola del explorador. Revisa, puede ser error de javascript.  Con F12 puedes abrir las herramientas del explorador (Chrome, Firefox, IE) para reivsar si manda alguna error.

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Saludos

    • Marcado como respuesta fredsale viernes, 13 de marzo de 2015 19:34
    viernes, 13 de marzo de 2015 18:44