Parámetros

Hola tengo la sgt consulta:
Como es el traspaso de parámetros desde asp a un procedimiento almacenado, me refiero el traspaso por el tipo de dato como es:
Pasar como parámetro desde asp un dato tipo int, char, varchar, numeric, datetime, smalldatetime etc.
por fa.. Ayuda urgente

1 respuesta

Respuesta
1
El procedimiente almacenado es para ASP lo mismo que un tabla, por tanto cuando realizas un conexión vía ODBC, lo único que haces es mandar a ejecutar este procedimiento almacendo en el servidor SQL. Te diré lo que yo hago.
Yo creo mi consulta para que reciba siempre valores de tipo varchar(50) que convierto usando la función cast de SQL para convertir de un tipo a otro
ejemplo que recibe un char para compararlo con un datetime
create procedure ejemplo @par varchar(50)as
select * from tabla where fecha=@cast(tabla.campo as datetime)>@par
Hace días que vienen en el grupo de noticias de Sql-server las preguntas sobre Sql-Server y asp. Sobre conexiones, sobre como ejecutar procedimientos almacenados,.. Espero que mi granito de arena sirva para poner un poquito más de luz a este tema.
Realmente no es demasiado complicado, bien al contrario. Llamar a un procedimiento almacenado mediante ADO y con un proveedor OLEDB no difiere en absoluto de como se hace desde Visual Basic, por lo menos a priori. Por tanto cualquier método que usemos para rellenar los objetos Recordset, connection, etc de ADO, debe ser válido para asp. No dejan de ser componentes activeX a los que rellenamos propiedades y de los que invocamos métodos recogiendo resultados.
Por tanto vamos a tomar el ejemplo más sencillo de llamada a procedimiento almacenado que hay en estas páginas y vamos a ver si funciona desde código ASP.
Solo una cuestión, si usáis esto, es conveniente que reviséis en books on line el comando set nocount, puede evitaros varios dolores de cabeza.
Lo primero el script de pruebas. (Es el mismo que hay en el artículo de llamadas a procedimientos almacenados sencillos).
-- Creamos una tabla
if not objectproperty(object_id('Pruebas'),'IsTable') is null
drop table pruebas
go
Create table pruebas (id int identity(1,1) not null primary key,
descripcion varchar(50))
go
if not objectproperty(object_id('spPruebas'),'IsProcedure') is null
drop procedure spPruebas
go
create procedure spPruebas(@idDesde int = 0, @idHasta int=999999999)
as
begin
select * from Pruebas where id between @idDesde and @idHasta
end
go
-- Y le insertamos datos de prueba...
Declare @i int
set @i=1
while @i<50
begin
insert into pruebas (descripcion)
values('Insertamos fila'+ cast(@i as varchar(20)) )
set @i=@i+1
end
Go
SpPruebas
Go
SpPruebas 1,12
Y ahora el código asp. No es un código completo, sino solo la parte que necesitamos para probar que funciona. No te olvides incluir las directivas iniciales si quieres probarlo.
Este primer trozo de código usa el método Open del objeto Recordset para recuperar los valores.
<table width="100%" border="0" cellpadding="0" cellspacing="0" >
<tr><td></td><td><h2 align='center'>Todos los artículos</h2></td></tr>
<%
' Primero creamos un objeto Recordset ...
Set ors = Server.CreateObject("ADODB.RecordSet")
' Ahora construimos la cadena de conexión....
' Cambia esta instruccion por la tuya para conectar a tu sql-server
Conexion = "Provider=SQLOLEDB;Data Source=127.0.0.1;" & _
"trusted_connection=yes;Initial Catalog=pruebas"
oRs.oPen "spPruebas 1,12",conexion
i=0
if err.number =0 then
Do until oRS.eof
if i=0 then
i=1
response.write "<tr bgcolor =#FFFFFF>"
else
response.write "<tr bgcolor =#DDDDFF>"
i=0
end if
response.write "<td width = '10%' >"
response.write "" & ors("id") & "</td>"
response.write "<td width = '90%'>"
response.write "" & ors("Descripcion") & "<br></td>"
response.write "</tr>"
ors.movenext
loop
else
response.write "no he podido abrir el recordset " & err.number & "-" & err.description
end if
ors.close
set ors=nothing
%>
</table>
Este segundo trozo de código usará sin embargo el objeto command y el objeto conexión para recuperar el recordset.
<table width="100%" border="0" cellpadding="0" cellspacing="0" >
<tr><td></td><td><h2 align='center'>Todos los artículos</h2></td></tr>
<%
' Primero creamos un objeto Recordset ...
Dim rs
set ocon= server.createobject("ADODB.Connection")
Set ocmd = Server.CreateObject("ADODB.command")
' Ahora construimos la cadena de conexión....
' Cambia esta instruccion por la tuya para conectar a tu sql-server
Conexion = "Provider=SQLOLEDB;Data Source=127.0.0.1;" & _
"trusted_connection=yes;Initial Catalog=pruebas"
oCon.open conexion
set ocmd.Activeconnection=ocon
on error resume next
ocmd.commandText="spPruebas"
ocmd.commandtype = 4
oCmd.Parameters.Append oCmd.CreateParameter("@idDesde",3,1,,1)
oCmd.Parameters.Append oCmd.CreateParameter("@idhasta",3,1,,12)
set rs= ocmd.execute
i=0
if err.number =0 then
on error goto 0
Do until rs.eof
response.write "" & rs("id") & "-" & rs("descripcion") & "<br>"
rs.movenext
loop
else
response.write "no he podido abrir el recordset " & err.number & "-" & err.description
end if
rs.close
set rs=nothing
response.write "ok todo ok"
%>
</table>
Saludos
Caraccalla
Y Crédito para
Miguel Egea
Sql-Server MVP
Por el artículo que usé de ejemplo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas