Foros del Web » Programando para Internet » ASPX (.net) »

adjuntar archivos en sql server con asp

Estas en el tema de adjuntar archivos en sql server con asp en el foro de ASPX (.net) en Foros del Web. Hola espero que alguien pueda ayudarme mi problema es: estoy trabajando en una pagina web que esta conectada a una base de datos sql server ...
  #1 (permalink)  
Antiguo 10/06/2009, 13:05
 
Fecha de Ingreso: junio-2009
Mensajes: 14
Antigüedad: 14 años, 10 meses
Puntos: 0
adjuntar archivos en sql server con asp

Hola espero que alguien pueda ayudarme mi problema es:

estoy trabajando en una pagina web que esta conectada a una base de datos sql server 2005 y la estoy haciendo en asp con visual basic el problema es que necesito subir a la base de datos archivos adjuntos de hasta 20mb o 10mb si no es posible de 20 pero no se como hacerlo lo maximo que me permite es de 8kb que es demaciado poco necesito un minimo de 10mb alguien podria ayudarme xfavor????
  #2 (permalink)  
Antiguo 10/06/2009, 15:24
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
Puntos: 12
Respuesta: adjuntar archivos en sql server con asp

Como estas haciendo la subida de tu file, por defualt el asp.net te permite subir 4 megas como maximo, para podr aumentar este limite es necesario configurar el web.config. Pero platicanos exactamente como estas haciendo para saber por que solo son 8kb.
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]
  #3 (permalink)  
Antiguo 11/06/2009, 07:29
 
Fecha de Ingreso: junio-2009
Mensajes: 14
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: adjuntar archivos en sql server con asp

ok tienes razon debi ser mas especifico el adjuntado del archivo lo hago de la siguiente manera:

tengo un control fileupload que es con el que elijo el archivo a subir luego al darle click al boton adjuntar se ejecuta un procedimiento almacenado que hice en sql server 2005 que simplemente recibe tres parametros 1 es el nombre del archivo 2 es la extension del archivo y 3 es el archivo en si...

segun he podido observar me parece que el problema es con los tipos de datos xq en VB el archivo se paresea y se mete en una variable de tipo byte() osea un arreglo de bytes que segun entiendo no tiene un limite de tamaño o almenos no tan pequeño ya que la funcion de parceo no me da problema... ok luego este archivo en la parte de asp osea en el codigo html es mandado con un tipo de dato object que lo asigna auntomaticamente asp ya que yo no le dije de que tipo es el se lo puso solo cuando asocie el procedimiento almacenado al dataset respectivo entonces el problema esta al momento de pasar ese "object" al sql server 2005 ya que en sql server recibo el parametro con un tipo de dato sql_variant que segun he leido es el que tiene un limite de 8Kb pero por mucho que he buscado no he encontrado un tipo de datos compatible (ademas del sql_variant) con el object que le manda asp luego esta variable le hago un convert(varbinary(max), @archivo) para que convierta el archivo en varbinary que tiene un limite de tamaño muchooo mayor a 8kb entonces mi problema es con el sql_variant

gracias por su ayuda de antemano, si no estoy siendo lo suficientemente descriptivo me dicen xfa para poner el codigo y asi que me entiendan mejor... GRACIAS
  #4 (permalink)  
Antiguo 11/06/2009, 09:40
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
Puntos: 12
Respuesta: adjuntar archivos en sql server con asp

A ver, vientos, creo que ya entendi, y lo que segun entiendo es que quieres subir un archivo completo a la base de datos, a una celda en tu tabla, y pues esto se hace con datos BLOB. El tipo de datos de tu campo debe ser de tipi IMAGE (nada ke ver kon archivos de imagen) osea que praticamente puedes subir cualquier archivo, asi como tu lo dices, en un arreglo de bytes.

Te dejo esta liga, espero te sirva: http://support.microsoft.com/kb/326502/es
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]
  #5 (permalink)  
Antiguo 11/06/2009, 13:54
 
Fecha de Ingreso: junio-2009
Mensajes: 14
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: adjuntar archivos en sql server con asp

gracias x la ayuda que me has dado Lavigne pero aun no logro hacer lo que necesito esque en el caso que se muestra en el link que me diste ellos hacen el acceso a la base de datos desde el aplicativo y yo por el contrario solo llamo a un procedimiento almacenado que realiza la insercion te pondre el codigo para que talvez asi puedas comprender mejor mi problema... gracias x tu tiempo y tu paciencia

en el click del boton adjuntar hago lo siguiente:
Dim file_ext As String
Dim filename As String
Dim myfile As Byte()
If FileUpload1.HasFile <> False Then
Dim filepath As String = FileUpload1.PostedFile.FileName
Dim pat As String = "\\(?:.+)\\(.+)\.(.+)"
Dim r As Regex = New Regex(pat)
Dim m As Match = r.Match(filepath)
file_ext = m.Groups(2).Captures(0).ToString()
filename = m.Groups(1).Captures(0).ToString()
Dim file As String = filename & "." & file_ext
myfile = getfilestream(filepath)
End If

Try
SqlDataSource1.Insert()
Catch ex As Exception
ex.tostring()
End Try

donde la funcion getfilestream(filepath) es:
Public Shared Function getfilestream(ByVal filepath As String) As Byte()
Dim stream As IO.FileStream = New IO.FileStream(filepath, _ IO.FileMode.Open, IO.FileAccess.Read)
Dim reader As IO.BinaryReader = New IO.BinaryReader(stream)
Dim myfile As Byte() = reader.ReadBytes(CType(stream.Length, Integer))
reader.Close()
stream.Close()
Return myfile
End Function

los parametros se mandan al procedimiento almacenado de la siguiente manera:
Protected Sub SqlDataSource1_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEven tArgs) Handles SqlDataSource1.Inserting
e.Command.Parameters("@nombre").Value = filename
e.Command.Parameters("@extension").Value = file_ext
e.Command.Parameters("@contenido").Value = myfile
End Sub

en la parte de asp se genera el siguiente codigo:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:bpmdocstestConnectionString %>"
InsertCommand="sp_insert_consulta_ambiental" InsertCommandType="StoredProcedure">
<InsertParameters>
<asp:Parameter Name="nombre" Type="String" />
<asp:Parameter Name="extension" Type="String" />
<asp:Parameter Name="contenido" Type="Object" />
</InsertParameters>
</asp:SqlDataSource>

como podes ver el tipo de dato del contenido osea el archivo en si es "object"

y el procedimiento almacenado es asi:
PROCEDURE [dbo].[sp_insert_consulta_ambiental]
@nombre varchar(512),
@extension varchar(50),
@contenido image --sql_variant
AS
BEGIN
insert into adjunto values
(@nombre, @extension,convert(varbinary(max),@contenido))
END

como puedes ver probe poniendo un tipo de datos image pero dice que no es compatible con sql_variant no entiendo y no se que hacer no se como arreglarlo xfa dame una mano me urge esto como podras ver.... gracias de antemano
  #6 (permalink)  
Antiguo 11/06/2009, 15:17
 
Fecha de Ingreso: junio-2009
Mensajes: 14
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: adjuntar archivos en sql server con asp

muuuuchas gracias por tu ayuda lavigne ya pude hacerlo lo unico que hice fue dejar el tipo de datos de procedimiento almacenado en image y le quite el type en asp ahora como tu dijiste me permite adjuntar un maximo de 4mb... pero dijiste que se puede modificar ese limite podrias decirme como se hace porfavor!!!!
  #7 (permalink)  
Antiguo 12/06/2009, 09:39
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
Puntos: 12
Respuesta: adjuntar archivos en sql server con asp

Claro men, visita esta liga: http://msdn.microsoft.com/en-us/library/aa479405.aspx Ahi viene, considero yo, casi todo lo que uno debe saber para Subir archivos.

Saludos y Feliz Desarrollo.
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]
  #8 (permalink)  
Antiguo 12/06/2009, 13:14
 
Fecha de Ingreso: junio-2009
Mensajes: 14
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: adjuntar archivos en sql server con asp

muchisimas gracias fann me ha sido de mucha ayuda lo que me has dado...
ahora solo te molesto con una preguntita mas te prometo que es la ultima jejeje
como puede hacer para que al darle click a un boton me abra una especie de fileupload pero que sea para descargar archivos de la base de datos no para subirlos osea yo necesito que el usuario al darle click a un boton pueda elejir la ubicacion donde quiere guardar el archivo que va a descargar... ya se como descargarlo lo unico que no se es eso

una vez mas gracias de antemano x tu ayuda, tiempo, y paciencia
  #9 (permalink)  
Antiguo 12/06/2009, 19:35
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
Puntos: 12
Respuesta: adjuntar archivos en sql server con asp

Claro, bueno, kreo ke viste el ejemplo de como bajar u obtener el archivo BLOB de la columna image, ahora bien, usando este mismo ejemplo, una vez que ya bajaste tu archivo a disco duro del server, ejecutas estas sentencias en tu boton, pasandole la ruta del file a descargar y listo.

Donde ArchivoName es la ruta del archivo.

Response.Clear()
Response.ContentType = "application/octet-stream"
Response.AppendHeader("Content-Disposition", "attachment; filename=" & System.IO.Path.GetFileName(ArchivoName))
Response.WriteFile(ArchivoName)
Response.End()

Espero te sirva, y no te preokupes por el numero de preguntas ke hagas, para estamos, sino soy yo, ya habra alguien mas ke pueda responderla!!!!

Saludos y Feliz desarrollo.
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]
  #10 (permalink)  
Antiguo 15/06/2009, 09:11
 
Fecha de Ingreso: junio-2009
Mensajes: 14
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: adjuntar archivos en sql server con asp

hice lo que me dijiste y me da el siguiente error:

Sys.webForms.PageRequestManagerParserErrorExceptio n: The message from the server could not be parsed. Common causes for this error are when response is modified by calls to Response.Write(), response filters, HttpMofules, or server trace is enabled. Details: Error parsing near 'Rar!(aqui salen dos cuadritos pero no se como ponerlos jeje)'

cabe aclarar que el archivo que estoy intentando descargar es un archivo .rar la descarga la hago con el siguiente codigo:

Dim MyData As System.Data.DataView
Dim arguments As System.Web.UI.DataSourceSelectArguments = New System.Web.UI.DataSourceSelectArguments
MyData = SqlDataSource4.Select(arguments)
My.Computer.FileSystem.WriteAllBytes("C:\" & MyData.Table.Rows(0)("nombre").ToString() & "." & MyData.Table.Rows(0)("extension").ToString(), MyData.Table.Rows(0)("contenido"), True)

Response.Clear()
Response.ContentType = "application/octet-stream"
Response.AppendHeader("Content-Disposition", "attachment; filename=" & System.IO.Path.GetFileName(MyData.Table.Rows(0)("n ombre").ToString()) & "." & MyData.Table.Rows(0)("extension").ToString())
Response.WriteFile("C:\" & MyData.Table.Rows(0)("nombre").ToString() & "." & MyData.Table.Rows(0)("extension").ToString())
Response.End()

el primer bloque de codigo es para bajar el archivo de la tabla al disco y funciona perfectamente ya que el archivo es creado y funciona perfectamente el error se da en la segunda parte...

gracias de antemano espero puedas ayudarme
  #11 (permalink)  
Antiguo 15/06/2009, 09:39
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
Puntos: 12
Respuesta: adjuntar archivos en sql server con asp

Porque en :

System.IO.Path.GetFileName(....

No estas poniendo "c:\" ?
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]
  #12 (permalink)  
Antiguo 15/06/2009, 09:59
 
Fecha de Ingreso: junio-2009
Mensajes: 14
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: adjuntar archivos en sql server con asp

disculpa tienes razon ya se lo puse pero sigue igual... este es el codigo:

Dim MyData As System.Data.DataView
Dim arguments As System.Web.UI.DataSourceSelectArguments = New System.Web.UI.DataSourceSelectArguments
MyData = SqlDataSource4.Select(arguments)
My.Computer.FileSystem.WriteAllBytes("C:\" & MyData.Table.Rows(0)("nombre").ToString() & "." & MyData.Table.Rows(0)("extension").ToString(), MyData.Table.Rows(0)("contenido"), True)

Response.Clear()
Response.ContentType = "application/octet-stream"
Response.AppendHeader("Content-Disposition", "attachment; filename=" & System.IO.Path.GetFileName("C:\" & MyData.Table.Rows(0)("nombre").ToString() & "." & MyData.Table.Rows(0)("extension").ToString()))
Response.WriteFile("C:\" & MyData.Table.Rows(0)("nombre").ToString() & "." & MyData.Table.Rows(0)("extension").ToString())
Response.End()

sigue mostrandome el mismo mensaje de error

en el Visual muestra un msj en la parte de los errores de tiempo de corrida que dice asi:

Excepción del tipo 'System.Threading.ThreadAbortException' en mscorlib.dll
Se produjo una excepción de tipo 'System.Threading.ThreadAbortException' en mscorlib.dll pero no se controló en el código del usuario

Última edición por rmulfus; 15/06/2009 a las 10:13
  #13 (permalink)  
Antiguo 15/06/2009, 15:20
 
Fecha de Ingreso: junio-2009
Mensajes: 14
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: adjuntar archivos en sql server con asp

ok muuuuchas gracias x tu ayuda Fann ya logre lo que necesitaba el problema era que el boton de descargar estaba dentro de un update panel y asi no funciona bien entonces solo lo saque del panel y listo ya funciona a la perfeccion

gracias x todo me sirvio de muuuucho tu ayuda

por si a alguien le sale el mismo error y no puede sacar el boton del update panel pueden intentar reparar el error con los consejos que dan es esta pagina: pongan esto en google : Sys.webForms.PageRequestManagerParserErrorExceptio n y en el primer link estan algunas posibles soluciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:19.