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

Recuperar campo de un registro recién creado

Estas en el tema de Recuperar campo de un registro recién creado en el foro de .NET en Foros del Web. Muy buenas. Me suena que este tema ya se ha comentado antes, pero no sé muy bien cómo buscarlo. El caso es que estoy envuelto ...
  #1 (permalink)  
Antiguo 16/11/2004, 08:44
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Recuperar campo de un registro recién creado

Muy buenas. Me suena que este tema ya se ha comentado antes, pero no sé muy bien cómo buscarlo.

El caso es que estoy envuelto en un tema de inserción de registros en SQL Server con DataTable, SqlDataAdapter, ... y todo eso, y aún no estoy familiarizado con ello. Pues bien, me he encontrado con esta línea para insertar un nuevo registro que proviene de un DataTable

Código:
this.daCasilla.Update(this.dtCasilla);
Uno de los campos es un autoincremetable ¿se llama así en SQL? y me gustaría recoger inmediatamente después de insertarlo el valor de este campo.

De modo que la base tiene entre otros campos "id_casilla" y "URL" y quiero que con el valor de id_casilla cambie el de URL, de esta forma:

"ampliar?id=numero", donde número es el valor de id_casilla.

¿Quedó claro?

Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 16/11/2004, 11:27
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
porque no usas un SP (stored procedure), usando parametros de entrada y uno de salida que te regresará el ID del registro INSERTADO

Podría quedarte algo como ésto

Cita:
CREATE PROCEDURE InsertarRegistro
(
@parametro1 int,
@parametro2 int,
@ID INT,
@ultimoID OUTPUT
)
AS
INSERT INTO Tabla
(
Campo1,
Campo2
)
VALUES
(
@parametro1,
@parametro2
)
WHERE ID = @ID

SELECT
@ultimoID = @@identity
Y con ello recuperas el valor de tu id.

No es dificl, intentalo.

Saludos y suerte
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net

Última edición por RootK; 16/11/2004 a las 11:33
  #3 (permalink)  
Antiguo 16/11/2004, 14:37
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
SP, uffff... de momento esto me supera, que llevo sólo una semanita dándole a SQL, y lo que puedo descubrir por ahí urgando en la base.

El caso es que yo me he encontrado con la aplicación prácticamente hecha, casi todo funcionando con SqlDataAdapter y DataTable y cosas por el estilo, y aún estoy un poquito verde.

Así que he pensado, que va a ser mejor dejar el campo URL sin modificar y, luego, al recuperar el registro en otras páginas modificarlo al mostrarlo, pero no en la base. O sea, creo la conexión con la consulta, los resultados los cargo en un SqlDataAdapter y luego los paso a la DataTable que se mostrará con DataBind()....

Suponiendo que dtCasillas es el DataTable y antes de llamar al procedimiento dtCasillas.DataBind(), me gustaría hacer algo como esto:

Código:
daCasillas.Fill(dtCasillas);
foreach(registro in dtCasillas)
{
   if(registro["cuerpo"] != "")
   {
      registro["URL"] = registro["URL"] + registro["id_casilla"];
   }
}
dtCasillas.DataBind();
Creo que más o menos se entiende lo que quiero hacer ¿no?, aunque la sintaxis no sea ni muchos menos eso.

De todas formas, mañana en el trabajo pongo exactamente cuál es el código que se está utilizando.

Gracias RootK. Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #4 (permalink)  
Antiguo 17/11/2004, 10:14
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Aquí está el código:

Código:
string idRegion = Request.QueryString["id_ccaa"];
OrigenDatos.StrCon = ConfigurationSettings.AppSettings["constring"];
ListaCasillas lCas = new ListaCasillas(true,idRegion);

dlCasillas.DataSource = lCas;
dlCasillas.DataBind();
donde dlCasillas es un DataList.

Luego, en el archivo ASPX se pone lo siguiente (resumido):

Código:
<%@ Control Language="c#" .......>
<asp:datalist id="dlCasillas".... runat="server">
   <ItemTemplate>
      <table ....>
         <tr bgcolor="#d8d8c4">
            <td valign="top">
               <span class="Titulo4n">
                  <%# DataBinder.Eval(Container.DataItem, "Titular") %>
               </span>
               <br>
	  <span class="Cursiva2n">
	     <%# DataBinder.Eval(Container.DataItem, "FechaHora") %>
	  </span>
            </td>
         </tr>
         <tr>
            <td>
               <span class="Contenido2n">
                  <a href='<%# DataBinder.Eval(Container.DataItem, "URL") %>'>Ver más...</a>
               </span>
            </td>
         </tr>
      </table>
   </ItemTemplate>
</asp:datalist>
Con DataBinder.Eval(Container.DataItem, "URL") se escribe el valor que contiene el campo URL. Entonces, lo que quiero es, antes de que se escriba ese valor ver qué contiene y, si cumple una condición, añadirle el valor del campo "ID_casilla".

¿Entendido?

Gracias de nuevo.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #5 (permalink)  
Antiguo 17/11/2004, 16:13
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Se me ocurre una cosilla, a ver si se puede hacer:


Código:
<a href='<%# DataBinder.Eval(Container.DataItem, "URL") %>
<%if(DataBinder.Eval(Container.DataItem, "Cuerpo")!=""{DataBinder.Eval(Container.DataItem, "ID_casilla")})%>'>Ver más...</a>
Esto evidentemente no funciona pero la solución podría ser algo así.

Una ayudita RootK .

Gracias.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #6 (permalink)  
Antiguo 17/11/2004, 16:46
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Podrías crear una funcion que te regrese el valor desado..

Ejemplo:

Cita:
<a href='<%# DataBinder.Eval(Container.DataItem, "URL") %>
<%# CustomFunction(Convert.ToString(DataBinder.Eval(Container.DataIt em, "Cuerpo")),Convert.ToString(DataBinder.Eval(Contai ner.DataItem, "ID_casilla"))) %>
Ver más...</a>
Y en tu codebehind, recibes esos dos parámetros:

Cita:
protected string CustomFunction(string s1,string s2)
{

if (s1!="")
return s2;
else
return s1;
}
Espero te sirva.

Salu2
  #7 (permalink)  
Antiguo 18/11/2004, 02:29
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Esto tiene muy, muy buena pinta. Era más o menos eso, sólo que no sabía cómo implementarlo.

Esta misma tarde lo pruebo y te cuento.

Muchísisimas gracias RootK, cada día te mereces más ser moderador . Upss, siempre igual, pero si ya lo eres .

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #8 (permalink)  
Antiguo 18/11/2004, 08:20
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4

Bravissimo RootK, ta quedau __tamadre.

Al final quedó así:

Código:
<span class="Contenido2n"><a href='<%#cambiaURL(DataBinder.Eval(Container.DataItem, "URL").ToString(),DataBinder.Eval(Container.DataItem, "ID_casilla").ToString())%>
ID_casilla era Integer y, hasta que me di cuenta ya me había arrancado unos cuantos pelos.

El CodeBehind:

Código:
protected string cambiaURL(string URL,string ID)
{
	if(URL!="ampliar")
	{
		return URL;
	}
	else
	{
		string URLFinal = "ampliar.aspx?id=" + ID;
		return URLFinal;
	}
}
Muchísimas gracias de nuevo. Je je, ya te debo unas cuantas.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #9 (permalink)  
Antiguo 19/11/2004, 13:06
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
Muchísimas gracias de nuevo. Je je, ya te debo unas cuantas.
No hay problema friend, mejor invita una chelas ?? jaja

Salu2
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 05:06.