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 de caraccalla
1
1
caraccalla, Experiencia de más de cinco años programando bases de datos
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