Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   .NET (http://www.forosdelweb.com/f29/)
-   -   Problemas con Store Procedure (http://www.forosdelweb.com/f29/problemas-con-store-procedure-412092/)

motinuza 25/07/2006 13:31

Problemas con Store Procedure
 
Hola a todos!!!
Soy un principiante en .NET y como tengo mucha fuerza de voluntad me asignaron la tarea de armar una base de datos de personal en SQL que sea visualizada desde el Browser por los usuarios. Hasta ahi todo bien...
El problema es que necesito enviar a un Store Procedure el número de Legajo de una persona y obtener varios datos de la misma como respuesta
Desde ya muchas gracias a todos!!!:neurotico :neurotico

royrojas 25/07/2006 14:33

aqui esta una clase muy completa para manejo de conexiones a la bd y tambien soporta procedimientos almacenados.
ahi esta el codigo de ejemplo tambien para descargar.

http://www.dotnetcr.com/index.aspx?I...clase-conexion

a los admins si gustan pueden poner el ejemplo en los faqs del sitio.

RootK 25/07/2006 17:30

que milagro que andas por aqui royrojas :arriba:, en cuanto a tu ejemplo no se ve mal la implementación que tienes aunque como comentario se puede optimizar todavía más ya que no hay manejo de caching en objetos, y en vez de usar los nombres de los tipos (if, then, etc) se pueden trabajar directamente con interfaces, etc, es por ello que te recomiendo que te bajes el Enterprise Library de microsoft y le heches un ojo al de datos para que veas a lo que me refiero.

Cita:

a los admins si gustan pueden poner el ejemplo en los faqs del sitio.
cualquier puede colocar una faq man.

Saludos y cualquier comentario será bienvenido

royrojas 26/07/2006 23:05

si hace tiempo que no entraba aqui, realmente tengo poco tiempo libre.

claro que se puede optimizar mas, pero vamos poco a poco, no se van a tirar todas las monedas en la primera jugada.

hay que ir demostrando los avances del codigo, por eso es que vamos asi.

moNTeZIon 27/07/2006 02:16

Hola motinuza,
Encontré esto que quizá te sirva:
http://www.codeproject.com/aspnet/MyDbViewerSite.asp
Si no tienes unas especificaciones muy concretas claro.
Saludos.

motinuza 27/07/2006 17:21

Les agradezco a todos pero no entiendo. Tal vez por ser nuevo en el tema no expresé mis dudas correctamente. Acá les mando el Store Procedure y el ASPX a ver si me pueden dar una mano.
Sigo obteniendo un solo parametro de salida y NO 2 o mas como necesito.
Gracias nuevamente!

CREATE procedure GetlastName_Gus2

@LEGAJO_PERSONAL varchar (7),
@nombres varchar (20) output,
@apellido varchar (20) output
as
select @nombres =nombres, @apellido = apellido
from personal
where LEGAJO_PERSONAL = @LEGAJO_PERSONAL
GO
************************************************** **************
<%@ Page Language="VB" %>
<%@ import Namespace="System.Data.SqlClient" %>
<%@ import Namespace="System.Data" %>
<%
Dim conPubs As SqlConnection
Dim cmdLastName As SqlCommand
Dim parmLastName As SqlParameter
Dim parmLP As SqlParameter

Dim strLastName As String

conPubs = New SqlConnection( "Server=localhost;database=PERSONAL_DE_COMUNICACIO NES;Integrated Security=SSPI")
cmdLastName = New SqlCommand( "GetlastName_Gus2", conPubs )
cmdLastName.CommandType = CommandType.StoredProcedure

' Parametro de entrada del LP
cmdLastName.Parameters.Add( "@LEGAJO_PERSONAL", "20557" )

' Parametro de salida del Nombre
parmLastName = cmdLastName.Parameters.Add( "@Nombres", SqlDbType.Varchar )
parmLastName.Size = 40
parmLastName.Direction = ParameterDirection.Output

' Parametro de salida del Apellido
parmLastName = cmdLastName.Parameters.Add( "@Apellido", SqlDbType.Varchar )
parmLastName.Size = 40
parmLastName.Direction = ParameterDirection.Output

' Ejecuta el Comando
conPubs.Open()
cmdLastName.ExecuteNonQuery()

' Recupera el valor de salida del Parametro
If Not IsDBNull( cmdLastName.Parameters( "@Apellido" ).Value ) Then
strLastName = cmdLastName.Parameters( "@Nombres" ).Value
Else
strLastName = "DESCONOCIDO !!!"
End If
conPubs.Close()
%>

El apellido es <%=strLastName%>

RootK 27/07/2006 21:50

la cuestion es que solo estás creando un solo objeto parámetro y debes crear uno por cada uno que necesites

haciendo unos pequeños ajustes a tu código quedaría de la siguiente forma:

Cita:

...
...
Dim conPubs As SqlConnection
Dim cmdLastName As SqlCommand
Dim parmLP As SqlParameter

Dim parmName As New SqlParameter("@Nombres", SqlDbType.VarChar, 40)
parmName.Direction = ParameterDirection.Output
cmdLastName.Parameters.Add(parmName)

Dim parmLastName As New SqlParameter("@Apellido", SqlDbType.VarChar, 40)
parmLastName.Direction = ParameterDirection.Output
cmdLastName.Parameters.Add(parmLastName)

' Ejecuta el Comando
conPubs.Open()
cmdLastName.ExecuteNonQuery()

' Recupera el valor de salida del Parametro
If Not IsDBNull(parmLastName.Value) Then
strLastName = parmName.Value
Else
strLastName = "DESCONOCIDO !!!"
End If
conPubs.Close()
%>

El apellido es <%=strLastName%>
salu2

motinuza 28/07/2006 14:02

GRACIAS!, Pero me sigue tirando UN resultado, (el nombre) seguro que me estoy equivocando en algo, en definitiva el codigo me quedo asi:


CREATE procedure GetlastName_Gus2

@LEGAJO_PERSONAL varchar (7),
@nombres varchar (20) output,
@apellido varchar (20) output

as

select @nombres = nombres , @apellido = apellido
from personal
where LEGAJO_PERSONAL = @LEGAJO_PERSONAL
GO

************************************************

<%@ Page Language="VB" %>
<%@ import Namespace="System.Data.SqlClient" %>
<%@ import Namespace="System.Data" %>
<%
Dim conPubs As SqlConnection
Dim cmdLastName As SqlCommand
Dim parmLP As SqlParameter
Dim strLastName As String

conPubs = New SqlConnection( "Server=localhost;database=PERSONAL_DE_COMUNICACIO NES;Integrated Security=SSPI")
cmdLastName = New SqlCommand( "GetlastName_Gus2", conPubs )
cmdLastName.CommandType = CommandType.StoredProcedure

' Parametro de entrada del LP
cmdLastName.Parameters.Add( "@LEGAJO_PERSONAL", "20557" )

' 1er. Parametro de salida, Nombre
Dim parmName As New SqlParameter("@Nombres", SqlDbType.VarChar, 40)
parmName.Direction = ParameterDirection.Output
cmdLastName.Parameters.Add(parmName)

' 2do. Parametro de salida, Apellido
Dim parmLastName As New SqlParameter("@Apellido", SqlDbType.VarChar, 40)
parmLastName.Direction = ParameterDirection.Output
cmdLastName.Parameters.Add(parmLastName)

' Ejecuta el Comando
conPubs.Open()
cmdLastName.ExecuteNonQuery()

' Recupera el valor de salida del Parametro
If Not IsDBNull(parmLastName.Value) Then
strLastName = parmName.Value
Else
strLastName = "DESCONOCIDO !!!"
End If
conPubs.Close()
%>

El apellido y el nombre es <%=strLastName%>

lanzi 28/07/2006 16:51

Soy bastante nuevo en esto, pero no puede ser que haya algun problema con el SQL? qUIEN HIZO EL sTORED pROCEDURE? Fijate, quizas el problema venga por ahi...

RootK 28/07/2006 18:13

cambia ésto:

cmdLastName.ExecuteNonQuery()

por ésto:

Cita:

Dim dr as SqlDataReader = cmdLastName.ExecuteReader()
dr.Read ()
...

Jorgemen 29/07/2006 16:17

Hay un proyecto gratuito que se llama pachacamaq y que es muy bueno para aprender sobre todo esto que plantearón, hay para VB y Csharp, no recuerdo muy bien el link pero en google poniendo pachacamaq lo encuentran de seguro.

motinuza 31/07/2006 14:24

Gracias Maestros!!!... me salvaron la vida!!


La zona horaria es GMT -6. Ahora son las 10:15.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.