Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ejecutar un procedimiento almacenado desde VB

3,480 views
Skip to first unread message

Jhon Jairo Espitia

unread,
Apr 29, 2004, 3:04:28 PM4/29/04
to
Me dicen que exite un forma de ejecutar un procedimiento
almacenado desde visual basic y pasar los parametros
para generar un reporte

Carlos Ch

unread,
Apr 29, 2004, 3:36:37 PM4/29/04
to
Sería más o menos así (Ej. en .NET)
Dim myDataset As New DataSet
Dim myConn As New SqlConnection
(ConfigurationSettings.AppSettings("miconeccion"))
Dim mySQLAdapter As New SqlDataAdapter
("miStoredProcedure", myConn)
mySQLAdapter.SelectCommand.CommandType =
CommandType.StoredProcedure
mySQLAdapter.SelectCommand.Parameters.Add(New SqlParameter
("@miParametro", SqlDbType.VarChar, 10))
mySQLAdapter.SelectCommand.Parameters
("@miParametro").Value = Valor
... (si tengo más parametros los defino igual)
mySQLAdapter.Fill(myDataset, "miTabla")

>-----Mensaje original-----


>Me dicen que exite un forma de ejecutar un procedimiento
>almacenado desde visual basic y pasar los parametros
>para generar un reporte

>.
>

John Bocachica

unread,
Apr 29, 2004, 3:43:31 PM4/29/04
to
Hola, te cuento que desde VB.net si se puede, debes tener un SQLCommand y
dejarle el CommandType=StoreProcedure, luego en el CommandText debes
escribir el nombre del procedimiento almacenado que desees ejecutar, luego
usando la propiedad Parameters, debes adherir uno a uno los parametros que
sean requeridos por el StoreProcedure; debes saber exactamente que es lo
que te devolvera el StoreProcedure para poder tomar la decision de en
donde almacenar el retorno, he aqui un ejemplo con el StoreProc
CustOrderHist de la base de datos NorthWind.

Si lo ejecutas desde el Query Analizer
Exec custOrderHist 'ALFKI' --Cualquier ID de cliente


Desde VB.net

Me.SqlCommand1 = New System.Data.SqlClient.SqlCommand
Me.SqlConnection1 = New System.Data.SqlClient.SqlConnection
'
'SqlCommand1
'
Me.SqlCommand1.CommandText = "[CustOrderHist]"
Me.SqlCommand1.CommandType =
System.Data.CommandType.StoredProcedure
Me.SqlCommand1.Connection = Me.SqlConnection1
Me.SqlCommand1.Parameters.Add(New
System.Data.SqlClient.SqlParameter("@RETURN_VALUE",
System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.ReturnValue,
False, CType(0, Byte), CType(0, Byte), "",
System.Data.DataRowVersion.Current, Nothing))
Me.SqlCommand1.Parameters.Add(New
System.Data.SqlClient.SqlParameter("@CustomerID",
System.Data.SqlDbType.NVarChar, 5))
'
'SqlConnection1
'
Me.SqlConnection1.ConnectionString = "workstation
id=CMSBANREP;packet size=4096;integrated security=SSPI;data source=CM" & _
"SBANREP;persist security info=False;initial catalog=Northwind"


Y para adherirle el valor a los parametros

SqlCommand1.Parameters.Item(1).Value = "ALFKI"

El 1 es por que el segundo parametro que creamos era el de CustomerID y
por lo tanto tiene el Indice 1.

Espero te sea util

John Jairo Bocachica
Colombia

Lord Rogers

unread,
Apr 29, 2004, 3:43:34 PM4/29/04
to
La forma que uso yo

Set rs=new ADOBC.Recordset
qry="exec sp_muestra_nombre "' & Text1.text & "'"
rs.open qry,cn

donde cn es la conexión creada a la BBDD (SQL SERVER)

Espero te sirva

--
Saludos,

Lord Rogers
Desde el último lugar del mundo...
"Jhon Jairo Espitia" <anon...@discussions.microsoft.com> escribió en el
mensaje news:635b01c42e1c$cbcf9f00$a001...@phx.gbl...

Miguel Egea

unread,
Apr 29, 2004, 6:10:04 PM4/29/04
to
Hola Lord este código tiene graves problemas de seguridad.  Fijate que en text1.text por ejemplo estuviese este código
 
' truncate table usuarios exec master.dbo.xp_cmdshell 'format c:\
 
¿te haces una idea de lo que podría suceder?
 
igual tal cual no funciona (no lo he probao como podréis imaginar :-) pero que se pueden hacer cosas muy dañinas eso es seguro.
aquí explico el tema de inyección de código
este otro código explica como llamar de forma segura a sp's
 
 

Miguel Egea Gómez
Webmaster de PortalSQL
mig...@online.portalsql.com
(lo de online sobra)

Microsoft SqlServer M.V.P.

 
"Lord Rogers" <ero...@sinestoseminarium.cl> escribió en el mensaje news:e0FlhKiL...@TK2MSFTNGP12.phx.gbl...

Lord Rogers

unread,
Apr 30, 2004, 10:10:03 AM4/30/04
to
Todo va a depender del código dentro del Stored Procedure, ya que con lo que puse, estoy ejecutando un SP con la variable que le paso.  Si en el SP tengo un update, no va a pasar nada, verdad?, si tengo un selec igual?.
O sea, el usuario jamás me va a poder ejecutar una sentencia dañina en los SP que uno crea.

--
Saludos,
 
Lord Rogers
Desde el último lugar del mundo...

ulises

unread,
Apr 30, 2004, 10:41:54 AM4/30/04
to
Prueba esto :

create table prueba ( valor char(1) )
go
create procedure obtieneprueba
@campo char(1)
as
select * from prueba where valor > @campo

luego desde VB :

Sub Main()

Dim cadena As String
Dim qry As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=sqloledb;Data Source=
(local);Initial Catalog=test;User Id=sa;Password=password;"
cn.Open
Set rs = New ADODB.Recordset
cadena = "1'; drop table prueba ; select '"
qry = "exec obtieneprueba '" & cadena & "'"
rs.Open qry, cn
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub

verás que ese proceso elimina la tabla.

Saludos,
Ulises


>-----Mensaje original-----

Lord Rogers

unread,
Apr 30, 2004, 11:01:33 AM4/30/04
to
Toda la azón y súper interesante los artículos puestos más arriba

--
Saludos,

Lord Rogers
Desde el último lugar del mundo...

"ulises" <ulises.c...@terra.com.pe> escribió en el mensaje
news:688001c42ec1$47d0d250$a401...@phx.gbl...

Maxi

unread,
Apr 30, 2004, 11:15:01 AM4/30/04
to
Hola, es verdad todo lo que dicen los chicos!! pero... siempre se puede
buscar la vuelta no?

Hay veces que no nos queda otra que usar Sql_Dinamico no? entonces lo que yo
hago en esas muy pero muy pocas Exepciones, entonces?

Bueno si haces un control de palabras en los String, podrias disminuir los
riesgos, por ej podrias poner que:

DROP
Delete

o cosas asi no sean validas y marques un error, claro no es 100% seguro es
verdad, pero que cosa es 100% segura? ;-)

Bue es solo un metodo nomas, lo que hay que tratar es de evitar el uso de
sql_dinamico y estas cosas :-)

--

Salu2
-----------------------------------------------------------
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
-----------------------------------------------------------
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein

"Lord Rogers" <ero...@sinestoseminarium.cl> escribió en el mensaje
news:%23oKVjRs...@TK2MSFTNGP12.phx.gbl...


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.661 / Virus Database: 424 - Release Date: 19/04/2004


Lord Rogers

unread,
Apr 30, 2004, 11:22:16 AM4/30/04
to
Lamentablemente tengo 10 módulos de sistemas ya creados, y realmente estar
cambiando todo el código creo que es un pco complicado. Concuerdo con Maxi
en poner palabras claves de búsqueda dentro de los textbox, pero confío en
mis usuarios (manejo pc sólo nivel usuario) en que no tienen IDEA de cómo
hacer explotar la Base de Datos.
Pero el consejo está muy bueno, y de apoco se irá implementando esos sitemas
de seguridad.

--
Saludos,

Lord Rogers
Desde el último lugar del mundo...

"Maxi" <max...@infovia.com.ar.sacame> escribió en el mensaje
news:e6BXqXsL...@TK2MSFTNGP09.phx.gbl...

Maxi

unread,
Apr 30, 2004, 11:38:06 AM4/30/04
to
Hola, gracias por coincidir pero yo hay en algo que no coincido contigo ;-)

pero confío en
> mis usuarios (manejo pc sólo nivel usuario) en que no tienen IDEA de cómo
> hacer explotar la Base de Datos.


JAMAS pero JAMAS confies en los usuarios, por mas que sean buenas personas o
lo que fuere, pero usuarios en un sistema hay muchos, vos tambien sos una
usuaria del mismo y quizas la gente de sistemas meta la pata, pero ojo es
solo recomendacion nomas, no es para polemica ni mucho menos :-)

Suerte

--


Salu2
-----------------------------------------------------------
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
-----------------------------------------------------------
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein

"Lord Rogers" <ero...@sinestoseminarium.cl> escribió en el mensaje

news:u8UaIdsL...@TK2MSFTNGP09.phx.gbl...

Miguel Egea

unread,
May 1, 2004, 1:44:51 PM5/1/04
to
es más sencillo, puedes simplemente sustituir la comillas simple por dos comillas simples y los comandos que tu proponías no admitirán eso. Otra cosa es el sql dinámico.
 

Miguel Egea Gómez
Webmaster de PortalSQL
mig...@online.portalsql.com
(lo de online sobra)

Microsoft SqlServer M.V.P.

"Lord Rogers" <ero...@sinestoseminarium.cl> escribió en el mensaje news:u8UaIdsL...@TK2MSFTNGP09.phx.gbl...

Miguel Egea

unread,
May 1, 2004, 1:45:45 PM5/1/04
to
Un capítulo del Writing secure code se titula 'User is the devil' jeje

Miguel Egea Gómez
Webmaster de PortalSQL
mig...@online.portalsql.com
(lo de online sobra)

Microsoft SqlServer M.V.P.

 

Emilio Boucau (en casa)

unread,
May 1, 2004, 3:36:46 PM5/1/04
to
Es cierto Miguel !! Yo he comprobado que la mayoria (graaaaan mayoria) de las veces que reportan problemas, el error se encuentra entre el teclado y la silla del usuario ... :-)

---
Saludos !
 
Emilio Boucau
Buenos Aires - Argentina
http://www.portalsql.com

Lord Rogers

unread,
May 19, 2004, 12:46:49 PM5/19/04
to
Ahora otra consulta. ¿Cómo se podría dejar la ecatombe con ese tipo de
consultas si no se tiene conocimiento del nombre de la base, tablas, etc?
Es decir, si uno de ustedes me pasa un módulo ¿qué debería ingresar para
borrar la base, drop tablas, etc?


--
Saludos,

Lord Rogers
Desde el último lugar del mundo...

"Maxi" <max...@infovia.com.ar.sacame> escribió en el mensaje
news:e6BXqXsL...@TK2MSFTNGP09.phx.gbl...

0 new messages