Funcion que ejecuta SP no funciona 2 veces en la misma pagina
Hola a todos.
He creado una funcion en asp para ejecutar procedimientos almacenados, que recibe un string con el SP y sus parametros, abre la conexion de base de datos, ejecuta el SP, pasa el valor a un recordset que luego utiliza el metodo getrows() pasandole las tuplas a un array que es retornado por la funcion y finalmente mata los objetos de conexion. Ademas menciono que esta en un include.
en la primera ejecucion el SP hace un select y no hay problema, luego ejecuta otro SP que debiera hacer un insert, pero me da un error que dice "La operación no está permitida si el objeto está cerrado.", segun lo que yo creo al comienzo de la funcion abre la conexion y al final la cierra,
adjunto codigo:
function fnExecuteSP(sp)
'DECLARACION DE VARIABLES
dim conn
dim IPServer
dim DB
dim User
dim Pass
dim RS
'Crea objeto de conexion a base de datos
set conn=server.CreateObject("ADODB.Connection")
'Define IP de servidor de base de datos
IPServer = "127.0.0.1;"
'Define nombre de base de datos usuario y password
DB = "basedatos"
User="usuario"
Pass="password"
'Asigna cadena de conexion a objeto de conexion
conn.connectionString = "driver={sql server}; server="&IPServer&" database="&DB&";uid="&User&";password="&Pass&";"
'Si encuentra algun error continua la ejecucion y captura el error en variable err
on error resume next
'Abre conexion a la base de datos
conn.open()
if accion = "ins" then
conn.execute(sp)
else
'Ejecuta procedimiento almacenado obtenido del parametro
set RS = conn.execute(sp)
'Si existe algun registro obtiene las tuplas pasandolas a un array
if not RS.eof then
RSArray = RS.getrows()
end if
'Si hubo algun error lo captura y envia mensaje por pantalla
if err.number <> 0 then
response.write "<font size='4' color='#0000ff'>En estos momentos no existe comunicación con el sistema."
response.write "<br>"
response.write "Por favor comuniquese con el administrador del sistema"
response.write "<br>"
response.write "Descripcion: " & err.description
response.end
conn.Close
end if
'Valor retornado por la funcion
fnExecuteSP = RSArray
end if
'Cerramos y matamos objetos de conexion y recordset utilizado
set RS = nothing
RS.Close()
conn.Close()
end function
y bueno en la otra pagina hago el llamado de la siguiente forma:
esta funciona sin problemas
arrVector = fnExecuteSP("sp_PORTAL_sel_usuarios '" & strRut & "'")
pero en la segunda llamada a la funcion no
fnExecuteSP (SP)
He creado una funcion en asp para ejecutar procedimientos almacenados, que recibe un string con el SP y sus parametros, abre la conexion de base de datos, ejecuta el SP, pasa el valor a un recordset que luego utiliza el metodo getrows() pasandole las tuplas a un array que es retornado por la funcion y finalmente mata los objetos de conexion. Ademas menciono que esta en un include.
en la primera ejecucion el SP hace un select y no hay problema, luego ejecuta otro SP que debiera hacer un insert, pero me da un error que dice "La operación no está permitida si el objeto está cerrado.", segun lo que yo creo al comienzo de la funcion abre la conexion y al final la cierra,
adjunto codigo:
function fnExecuteSP(sp)
'DECLARACION DE VARIABLES
dim conn
dim IPServer
dim DB
dim User
dim Pass
dim RS
'Crea objeto de conexion a base de datos
set conn=server.CreateObject("ADODB.Connection")
'Define IP de servidor de base de datos
IPServer = "127.0.0.1;"
'Define nombre de base de datos usuario y password
DB = "basedatos"
User="usuario"
Pass="password"
'Asigna cadena de conexion a objeto de conexion
conn.connectionString = "driver={sql server}; server="&IPServer&" database="&DB&";uid="&User&";password="&Pass&";"
'Si encuentra algun error continua la ejecucion y captura el error en variable err
on error resume next
'Abre conexion a la base de datos
conn.open()
if accion = "ins" then
conn.execute(sp)
else
'Ejecuta procedimiento almacenado obtenido del parametro
set RS = conn.execute(sp)
'Si existe algun registro obtiene las tuplas pasandolas a un array
if not RS.eof then
RSArray = RS.getrows()
end if
'Si hubo algun error lo captura y envia mensaje por pantalla
if err.number <> 0 then
response.write "<font size='4' color='#0000ff'>En estos momentos no existe comunicación con el sistema."
response.write "<br>"
response.write "Por favor comuniquese con el administrador del sistema"
response.write "<br>"
response.write "Descripcion: " & err.description
response.end
conn.Close
end if
'Valor retornado por la funcion
fnExecuteSP = RSArray
end if
'Cerramos y matamos objetos de conexion y recordset utilizado
set RS = nothing
RS.Close()
conn.Close()
end function
y bueno en la otra pagina hago el llamado de la siguiente forma:
esta funciona sin problemas
arrVector = fnExecuteSP("sp_PORTAL_sel_usuarios '" & strRut & "'")
pero en la segunda llamada a la funcion no
fnExecuteSP (SP)