Foros del Web » Programación para mayores de 30 ;) » .NET »

Almacenar la URL en la Base de datos

Estas en el tema de Almacenar la URL en la Base de datos en el foro de .NET en Foros del Web. Hola foro!! Tengo una duda muy grande,y es que no se como almacenar una ruta de un archivo en la base de datos.Estas rutas son ...
  #1 (permalink)  
Antiguo 25/04/2005, 02:29
 
Fecha de Ingreso: febrero-2005
Mensajes: 31
Antigüedad: 19 años, 2 meses
Puntos: 0
Pregunta Almacenar la URL en la Base de datos

Hola foro!!

Tengo una duda muy grande,y es que no se como almacenar una ruta de un archivo en la base de datos.Estas rutas son concretamente de imagenes para no almacenarlas en la Base de datos,pero es que no tengo ni idea.
Estoy programando en ASP.net con C#.

Muchas gracias
  #2 (permalink)  
Antiguo 25/04/2005, 03:26
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
puedes guardarlas a través de un string

si lo que quieres es que la suba un cliente puedes utilizar un <input id="imagen" type="file">
y luego recoges el archivo y guardas:
dim destino as string
If imagen.PostedFile.FileName <> "" Then
destino = "c:\\turuta" + identificador + ".jpg"
imagen.PostedFile.SaveAs(destino)
End If

'Los directorios se separan con \\ no con \

y luego almacenas el nombre del archivo, siempre y cuando la ruta de almacen de imagenes sea la misma siempre, por ejemplo si todas tus imagenes las subes a c:\Images\ y el nombre de la imagen vendrá definido por el identificador (esto es para que si 2 imagenes tienen el mismo nombre no las montes), y además otro campo donde guardes el nombre real de la imagen.

No se si me he explicado, si no, por aqui andamos
  #3 (permalink)  
Antiguo 25/04/2005, 04:27
 
Fecha de Ingreso: febrero-2005
Mensajes: 31
Antigüedad: 19 años, 2 meses
Puntos: 0
Hola de nuevo!!

Aqui te mando el código de lo que tiene que ver con la base de datos.
Mira yo tengo una base de datos y una tabla que se llama respuestas,en ella almaceno el nombre de una imagen y su ruta que si miras el ultimo metodo que te he mandado,lo que me hace es que almacena la imagen en una carpeta que se llama imagresp,vale??que eso si que me sale y me lo almacena correctamente.Pero lo que no se y no me sale es como almacenar en la base de datos esa ruta una vez subido.Porque tengo que hacer un INSERT con la ruta tambien,no??Entre el codigo esta en maysucula las explicaciones de lo que esta mal por si no lo entiendes.

MUCHAS GRACIAS

//CODIGO

protected System.Web.UI.WebControls.TextBox cod_respuesta;
protected System.Web.UI.WebControls.TextBox desc_respuesta;
protected System.Web.UI.WebControls.Button bAceptar;
protected System.Web.UI.WebControls.Literal Literal1;
protected System.Web.UI.HtmlControls.HtmlInputFile txtUpload;
protected System.Web.UI.WebControls.Button boton_subir;
protected System.Web.UI.WebControls.Label mensaje;
protected System.Web.UI.WebControls.TextBox nom_imagen;
protected System.Web.UI.WebControls.Literal Literal2;


//Operacion que quiero realizar
//AQUI ESTA LA INSTRUCCION SQL ALMACENO UN CODIGO,UNA DESCRIPCION,EL NOMBRE DE LA IMAGEN Y ME FALTA EL CAMPO QUE SE LLAMA RUTA_IMAGEN QUE NO SE LO QUE PASARLE PARA ALMACENAR LA RUTA

string sqlquery = "INSERT INTO Respuest(cod_respuesta,desc_respuesta,nombre_image n) VALUES (@cod_respuesta,@desc_respuesta,@nom_imagen)";
//Ruta donde esta la BD para que se conecte con ella
string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Inetpub\\wwwroot\\proyecto\\bd.mdb";
//Establece la conexión
OleDbConnection con = new OleDbConnection(ConnectionString);

OleDbCommand cmd = new OleDbCommand(sqlquery,con);
{
//Coleccion de parametros
OleDbParameterCollection pms = cmd.Parameters;

pms.Add("@cod_respuesta", OleDbType.Integer, 10);
pms.Add("@desc_respuesta", OleDbType.VarChar);
pms.Add("@nom_imagen", OleDbType.VarChar);
//AQUI NO SE LO QUE PONER EN ESTA INSTRUCCION DE BAJO,JO HE PUESTO EL TXTUPLOAD PERO NO ES ESO,QUE ESTE ES EL NOMBRE DEL CAMPO INPUT DE ARRIBA
pms.Add("..........");

pms["@cod_respuesta"].Value = cod_respuesta.Text.Trim();
pms["@desc_respuesta"].Value = desc_respuesta.Text.Trim();
pms["@nom_imagen"].Value = nom_imagen.Text.Trim();
//ESTO ESTA MAL,ES QUE NO SE LO QUE VA
pms["........................"];

try
{
con.Open();
cmd.ExecuteNonQuery();
this.Literal1.Visible = false;
this.Literal2.Visible = true;
con.Close();
}
........

private void boton_subir_Click(object sender, System.EventArgs e)
{
string TargetPath = "c:\\Inetpub\\wwwroot\\proyecto\\imagresp\\" + Path.GetFileName(txtUpload.PostedFile.FileName);
txtUpload.PostedFile.SaveAs(TargetPath);
mensaje.Text="Tu archivo se recibio correctamente en:: <b>" + TargetPath + "</b>";

}
  #4 (permalink)  
Antiguo 25/04/2005, 05:34
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Bien, y porque no le pones el TargetPath???Es decir, primero subes el archivo y luego insertas en la base de datos, con otro parametro que se llamer ruta y le pasas el targetPath, es decir "c:\\intetpub\\...."

Supongo que quieres eso, porque no entiendo muy bien donde tienes el problema exactamente.
  #5 (permalink)  
Antiguo 25/04/2005, 10:36
 
Fecha de Ingreso: febrero-2005
Mensajes: 31
Antigüedad: 19 años, 2 meses
Puntos: 0
Hola!!

Es que claro el metedo que he hecho es de tipo void y no me devuelve el TargetPath. Y he hecho unas cosas pero me dice que no se puede transformar de void a object. A lo mejor es una chorrada porque es lo más seguro pero es que no se como hacerlo.

Saludos
  #6 (permalink)  
Antiguo 25/04/2005, 11:12
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Hombre pero puedes declarar una variable de viewstate y almacenar ahí el targetpath, o incluso hacer la inserción en la base de datos en el momento de subir, es decir en el boton_subir_click, me entiendes???
Si no sabes manejar el viewstate, dimelo y te ayudo, ok??
  #7 (permalink)  
Antiguo 26/04/2005, 03:30
 
Fecha de Ingreso: febrero-2005
Mensajes: 31
Antigüedad: 19 años, 2 meses
Puntos: 0
Hola!!

Lo del ViewState no se como funciona,pero parece que suene bien.Te agradeceria mucho que me enseñaras y asi ya sabre algo más en esta vida.Si no,lo puedo intentar con insertarlo dentro del evento del boton subir..todo es probarlo.

Muchas gracias
  #8 (permalink)  
Antiguo 26/04/2005, 03:40
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
private void boton_subir_Click(object sender, System.EventArgs e)
{
string TargetPath = "c:\\Inetpub\\wwwroot\\proyecto\\imagresp\\" + Path.GetFileName(txtUpload.PostedFile.FileName);
viewstate("ruta") = TargetPath
txtUpload.PostedFile.SaveAs(TargetPath);
mensaje.Text="Tu archivo se recibio correctamente en:: <b>" + TargetPath + "</b>";

}

y luego en cualquier parte de tu página lo puedes coger, por ejemplo:

pms["@ruta"].value =viewstate("ruta")

Este tipo de variables sirven para almacenar información en el servidor sin que se pierda tras recargar una página,
  #9 (permalink)  
Antiguo 26/04/2005, 07:29
 
Fecha de Ingreso: febrero-2005
Mensajes: 31
Antigüedad: 19 años, 2 meses
Puntos: 0
Hola!!

He probado lo que tu me has dicho pero me salen estos dos errores al compilar y no se de donde pueden venir porque como nunca he gastado el viewstate pues voy un poco perdidilla.

1)'System.Data.OleDb.OleDbParameter' no contiene una definición para 'value'
2)'System.Web.UI.Control.ViewState' denota 'propiedad', cuando se esperaba 'método'

gracias
  #10 (permalink)  
Antiguo 26/04/2005, 08:10
Avatar de HenrydeSousa  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 300
Antigüedad: 19 años, 7 meses
Puntos: 2
La verdad no he entendido muy bien tu problema. Me imagino que tienes un botón
para subir la imagen o guardar los datos cierto?. Dices que la imagen ya la sube?
Entonces lo que sigue creo que es más facil aún. Guarda en una variable el path de
la imagen y luego la insertas en tu db con un simple insert into ... o como quieras
que lo hagas.

Por ejemplo:
string ruta, NombreArchivo, extencion;
NombreArchivo="Pamela";
extencion=".jpg";
ruta = "Imagenes/" & NombreArchivo & extencion

y ya luego insertas lo que tiene tuta en la db.
Como recomendación, dale al nombre del archivo un nombre único para que no
sobreescribas otra imagen. De todos modos si quieres un código más completo hazlo saber.

Hola jose minglein2:
dices que los directorios se separan con \\ no con \ mmm, bueno no sé pero te diré
que yo los separo con / y lo hace perfecto. Saludos...
  #11 (permalink)  
Antiguo 26/04/2005, 08:36
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
si, que lo puedes separar con / pero siempre y cuando este dentro de la parte de aplicación, es decir, si tu aplicacion esté en c:\inetpub\wwwroot\aplicacion\ y quieres acceder a c:\directorio, CREO que no se puede con / puesto que denotan direcciones relativas.


Con respecto a los errores, sería conveniente que pusieras el cod completo que tenga que ver con la inserción y el upload, para ver mejor porque te da los errores.
  #12 (permalink)  
Antiguo 26/04/2005, 09:22
 
Fecha de Ingreso: febrero-2005
Mensajes: 31
Antigüedad: 19 años, 2 meses
Puntos: 0
Aqui te mando el código y estos son los 2 errores que me salen ahora,el de antes del value era porque estaba en minuscula en lugar de mayuscula y los errores de ahora me salen en los 2 viewstate que hay en el código:

cs(97): El nombre 'viewstate' no existe en la clase o el espacio de nombres 'proyecto.crearespuesta'
cs(135): El nombre 'viewstate' no existe en la clase o el espacio de nombres 'proyecto.crearespuesta'

Muchas gracias

Aqui esta el código de como ha quedado con lo que tiene que ver con lo que estamos intentando averiguar:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;

namespace proyecto
{
/// <summary>
/// Descripción breve de editarpregunta.
/// </summary>
public class crearespuesta : System.Web.UI.Page
{
private string error2;
private bool tieneerror;
private string ruta;

protected System.Web.UI.WebControls.TextBox cod_respuesta;
protected System.Web.UI.WebControls.TextBox desc_respuesta;
protected System.Web.UI.WebControls.Button bAceptar;
protected System.Web.UI.WebControls.Literal Literal1;
protected System.Web.UI.HtmlControls.HtmlInputFile txtUpload;
protected System.Web.UI.WebControls.Button boton_subir;
protected System.Web.UI.WebControls.Label mensaje;
protected System.Web.UI.WebControls.TextBox nom_imagen;
protected System.Web.UI.WebControls.Literal Literal2;


private void Page_Load(object sender, System.EventArgs e)
{
// Introducir aquí el código de usuario para inicializar la página
}

private void InitializeComponent()
{
this.bAceptar.Click += new System.EventHandler(this.bAceptar_Click);
this.boton_subir.Click += new System.EventHandler(this.boton_subir_Click);
this.Load += new System.EventHandler(this.Page_Load);

}

private void bAceptar_Click(object sender, System.EventArgs e)
{
if(!tieneerror)
{

//EL @RUTA QUE LE PASO EN EL INSERT CREO QUE ESTA MAL PORQUE NO SE LO PUEDO PASAR DIRECTAMENTE,Y NO SE QUE PONERLE

//Operacion que quiero realizar
string sqlquery = "INSERT INTO Respuesta(cod_respuesta,desc_respuesta,nom_imagen, ruta_imagen) VALUES (@cod_respuesta,@desc_respuesta,@nom_imagen,@ruta) ";
//Ruta donde esta la BD para que se conecte con ella
string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Inetpub\\wwwroot\\proyecto\\bd.mdb";
//Establece la conexión
OleDbConnection con = new OleDbConnection(ConnectionString);

OleDbCommand cmd = new OleDbCommand(sqlquery,con);
{
//Coleccion de parametros
OleDbParameterCollection pms = cmd.Parameters;

pms.Add("@cod_respuesta", OleDbType.Integer, 10);
pms.Add("@desc_respuesta", OleDbType.VarChar);
pms.Add("@nom_imagen", OleDbType.VarChar);

pms["@cod_respuesta"].Value = cod_respuesta.Text.Trim();
pms["@desc_respuesta"].Value = desc_respuesta.Text.Trim();
pms["@nom_imagen"].Value = nom_imagen.Text.Trim();
//ESTO NO SE SI SE PUEDE HACER
pms["@ruta"].Value =viewstate("ruta");


try
{
con.Open();
cmd.ExecuteNonQuery();
this.Literal1.Visible = false;
this.Literal2.Visible = true;
con.Close();
}
catch
{
anyadirError("El código de la respuesta ya <BR> esta en la base de datos.");
}
}
}


private void boton_subir_Click(object sender, System.EventArgs e)
{
string TargetPath = "c:\\Inetpub\\wwwroot\\proyecto\\imagresp\\" + Path.GetFileName(txtUpload.PostedFile.FileName);
txtUpload.PostedFile.SaveAs(TargetPath);
viewstate("ruta") = TargetPath;
mensaje.Text="Tu archivo se recibio correctamente en:: <b>" + TargetPath + "</b>";
}
}
}
  #13 (permalink)  
Antiguo 26/04/2005, 09:40
Avatar de HenrydeSousa  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 300
Antigüedad: 19 años, 7 meses
Puntos: 2
particularmente creo que si estas desarrollando una aplicación, todos tus archivos deberían estar en el mismo directorio.

Con respecto al TargetPath no es necesario que le pases la ruta completa
string TargetPath = "c:\\Inetpub\\wwwroot\\proyecto\\imagresp\\" + Path.GetFileName
te basta con
string TargetPath = "imagresp\\" + Path.GetFileName

Por último, la verdad no revisé muy bien tu código, y tampoco termino de entender muy bien lo que quieres, pero no creo que necesites un viewstate para guardar la ruta de tu imagen. Saludos...
  #14 (permalink)  
Antiguo 26/04/2005, 09:54
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
El error esta en la adaptación de VB a C#, en C# sería:

ViewState["ruta"]=TargetPath;

y viceversa:
pms["@ruta"].Value =ViewState["ruta"];

Perdona, pero pensaba que lo sabías, es que tengo la fea costumbre de contestar siempre en VB sin fijarme en el lenguje de los demás

Mil perdones y así seguro te funciona
  #15 (permalink)  
Antiguo 26/04/2005, 10:04
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Henry, te pongo un ejemplo sencillo, documentos pdfs privados, autentificacion mediante forms, los pdfs no conviene nada,pero nada, ponerlos en el directorio de la aplicación porque con introducir este en la barra de direcciones, el pdf privado no sería tan privado,

Claro que hay más soluciones, pero yo prefiero que sea la aplicación la que siempre controle al usuario. Aunque bueno esto ya es OffTopic
  #16 (permalink)  
Antiguo 27/04/2005, 02:37
 
Fecha de Ingreso: febrero-2005
Mensajes: 31
Antigüedad: 19 años, 2 meses
Puntos: 0
Muchas gracias!!!!!

Por fin me funciona,es increible!!!lo que sabes.Me alegro de saber algo más con lo del ViewState ese.Me parece a mi que es como una especie de variable que pongas donde la pongas te va a dar el valor que se ha quedado almacenado donde los has declarado o algo asi,no??

Bueno 1000 gracias por tu ayuda y por todo.
  #17 (permalink)  
Antiguo 27/04/2005, 04:07
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Eso es, es una variable , que según he descubierto hace muy poquito, se envía al cliente de forma oculta, y que sirve para almacenar valores sin que se pierdan con los postback de página. También te resultaría util, por si no las conoces las variables de Session, que sirven para almacenar un valor aunque se cambie de pagina, es decir si estoy en pagina1.aspx y le asigno "hola" y luego me voy a página2.aspx podré acceder al valor "hola", no se si me explico. Si no siempre queda preguntar jeje.

Un saludo y ya sabes para lo que necesites por aquí andamos
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 11:26.