2011-03-31 20 views
8

Estoy tratando de evitar el uso de consultas SQL directas en mi aplicación web. Miré a mi alrededor y llegué a la conclusión de que ADO Recordset s sería la mejor o al menos la herramienta más segura para el trabajo. Necesito insertar registros en una tabla de base de datos. Lamentablemente, no sé cómo obtener el valor de identidad para el registro que acabo de insertar. Aquí está una reducción de lo que tengo ahora:¿Cómo obtener el ID de inserción de este ADODB.Recordset?

<% 
dim insertID, rs 
set rs = Server.CreateObject("ADODB.Recordset") 
rs.Open "my_table_name", conn, adOpenForwardOnly, adLockOptimistic 

rs.AddNew() 

Call m_map_values_to_rs(rs) 

rs.Update() 

insertID = rs("id") 

rs.Close() 
rs = Nothing 
%> 

El código que tengo es insertar correctamente el registro, pero no puedo por la vida de a averiguar cómo llegar al campo id de la Recordset a actualizar después de la inserción. ¿Cómo puedo recuperar el valor de la columna de identidad desde este Recordset?

ACTUALIZACIÓN - Aquí está la solución con respecto al código anterior.

Tuve que cambiar el tipo de cursor a adOpenKeyset en lugar de adOpenForwardOnly. Después de hacer esto, el registro se actualiza automáticamente con el nuevo valor del campo "número automático" después del inserto. Sin embargo, es no lo que piensas que es. El valor de rs("id") no se convierte en un número entero o una variante. Se convierte en una especie de tipo Automation y no se puede evaluar como un número. Tampoco se puede usar CInt() directamente en ese tipo por alguna razón. Entonces, lo que debes hacer es convertir el valor a una cadena y luego convertirlo a Int. He aquí cómo lo conseguí:

insertID = CInt(rs("id") & "") 

Gracias a Dee por su respuesta. Ayudó inmensamente.

+0

gracias por la actualización - que es información valiosa – Dee

+1

hilo viejo, pero rs ("id") es un objeto de campo. Debería poder obtener rs ("id"). Valor – alfadog67

Respuesta

3

Este artículo explica los medios para obtener un valor de identidad con código de ejemplo. Si necesita más ayuda después de esto nos dejó saber

+0

Gracias, lo había visto/descremado, pero aparentemente me perdí la relevancia de la última parte. – sholsinger

+0

Encontré un problema con el valor del campo que se devolvió después de esto. Ver la pregunta de cómo manejé eso. – sholsinger

+4

La URL en esta respuesta ya no funciona. – lpacheco

Cuestiones relacionadas