Author Topic: llamado de procedimiento almacenado en botones  (Read 7407 times)

0 Members and 1 Guest are viewing this topic.

Offline fre_saga

  • Sv Member
  • ***
  • Posts: 275
llamado de procedimiento almacenado en botones
« on: January 31, 2013, 09:30:45 pm »
hola buenas noches  quiero pedir les su ayuda  ya que quiero trabajar con procedimientos almacenado en una base de datos sql server
tengo  el procedimiento almacenado insert, update, delete ,select

el problema es que no se como llamarlo  en los eventos click de los respectivos

Offline Radiux

  • Sv Full Member
  • *
  • Posts: 939
Re:llamado de procedimiento almacenado en botones
« Reply #1 on: January 31, 2013, 10:11:30 pm »
La forma mas sencilla es agregar un Dataset al proyecto,  y agregarle las tablas, procedimientos y vistas a las que queras tener acceso directo a través de el.

Es una forma sencilla, económica, burda y sucia para acceder a los datos, hay otras formas pero esta es la mas sencilla para aprender

http://www.asp.net/web-forms/tutorials/data-access/introduction/creating-a-data-access-layer-cs.

Te recomiendo lecturas de Data Access Layer y de ser posible Web Services, porque en proyectos grandes no es muy común que la aplicación tenga acceso directo a los datos, lo usual es que exista un Web Service de por medio y en el se establezca  la DAL

Offline murraybozinsky

  • Sv Jr.
  • **
  • Posts: 54
Re:llamado de procedimiento almacenado en botones
« Reply #2 on: February 01, 2013, 08:12:18 am »
Aqui esta una forma  de muchas que hay  para el Select,

Dim Dt as new Datatable
Dim Dadapter  as SqlDataAdapter
Dim Conn = New SqlConnection
        Conn.ConnectionString = "aqui tu String de conexion"

        Dim cmd As New SqlCommand
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = "TU_STORE_PROCEDURE"
        cmd.CommandTimeout = 0

        cmd.Connection = Conn

'PARA ASIGNAR ALGUN PARAMETRO OPCIONALMENTE SINO ELIMINA ESTA LINEA
        cmd.Parameters.Add("@PARAMETERO_1", SqlDbType.VarChar, 5).Value = Me.control_o_variable.text

Dadapter = New SqlDataAdapter(cmd)

        If Conn.State = ConnectionState.Open Then
            Conn.Close()
        End If

        Try
            Conn.Open()
            Dadapter.Fill(DT)

            Conn.Close()
        Catch ex As SqlException

            MsgBox(ex.Message)
            If Conn.State = ConnectionState.Open Then
                Conn.Close()
            End If


        End Try


'' luego asignas el dt a algun datagridview para mostrar la data.

Offline tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Posts: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:llamado de procedimiento almacenado en botones
« Reply #3 on: February 01, 2013, 10:34:07 am »
Dim Dt as new Datatable
Dim Dadapter  as SqlDataAdapter
Dim Conn = New SqlConnection
        Conn.ConnectionString = "aqui tu String de conexion"

        Dim cmd As New SqlCommand
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = "TU_STORE_PROCEDURE"
        cmd.CommandTimeout = 0

        cmd.Connection = Conn

'PARA ASIGNAR ALGUN PARAMETRO OPCIONALMENTE SINO ELIMINA ESTA LINEA
        cmd.Parameters.Add("@PARAMETERO_1", SqlDbType.VarChar, 5).Value = Me.control_o_variable.text

Dadapter = New SqlDataAdapter(cmd)

        If Conn.State = ConnectionState.Open Then
            Conn.Close()
        End If

        Try
            Conn.Open()
            Dadapter.Fill(DT)

esta bien, funciona tu solución... pero por este tipo de cosas es que siempre la mara de Java denigra al visual basic .Net.....


para que utilizas un dataSet?

para este tipo de cosas se crearon en los Command los métodos ExecuteNonQuery y la función ExcecuteEscalar, incluso si es un array de datos [select] podes utilizar el ExcecuteEscalar, porque este retorna un tipo Object que podés castear a dataTable de manera sencilla...


Y otra, para que cerras la conexión si luego la vas a abrir?

Quote
        If Conn.State = ConnectionState.Open Then
            Conn.Close()
        End If

        Try
            Conn.Open()
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Offline Rampage

  • Sv Member
  • ***
  • Posts: 256
  • http://www.geekosplay.com
    • GeekosPlay
Re:llamado de procedimiento almacenado en botones
« Reply #4 on: February 01, 2013, 01:02:16 pm »
hola buenas noches  quiero pedir les su ayuda  ya que quiero trabajar con procedimientos almacenado en una base de datos sql server
tengo  el procedimiento almacenado insert, update, delete ,select

el problema es que no se como llamarlo  en los eventos click de los respectivos

sola una consulta, en que lenguaje?
import impermiable.antiestupideces
public class mevale20{if(comentario.estupido ==true) {comentario.ignorar;}}

Offline fre_saga

  • Sv Member
  • ***
  • Posts: 275
Re:llamado de procedimiento almacenado en botones
« Reply #5 on: February 01, 2013, 03:14:39 pm »
estoy trabajando en vb.net 2010  lenguaje vb aplicacion cliente/servidor
los procedimientos almacenados anterior mente los trabajo  como menciona Radiux
pero cuando se arruina el dataset es el problema q hay q hacer todo de nuevo por eso quiero utilizar otra forma
 
« Last Edit: February 01, 2013, 03:24:26 pm by fre_saga »

Offline tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Posts: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:llamado de procedimiento almacenado en botones
« Reply #6 on: February 01, 2013, 06:16:16 pm »
pero cuando se arruina el dataset es el problema q hay q hacer todo de nuevo por eso quiero utilizar otra forma

cuando se arruina?? de que forma se te arruina?

ia te dije que la solución es utilizar ExcecuteNonQuery o ExcecuteScalar, según tu necesidad
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Offline m.wilian

  • MiembrosReales
  • *
  • Posts: 43
Re:llamado de procedimiento almacenado en botones
« Reply #7 on: February 01, 2013, 06:23:16 pm »
Pues, yo te recomendaría que creases clases para poder gestionar sin problema los datos, realmente los dataset no son muy convenientes cuando tus proyectos cambian a cada rato, no es que se te arruinen, sino que cada vez que haces un cambio a una tabla, ya sea el tipo de dato, longitud, nombre del campo, etc. estos no se generan en el dataset ya que el dataset no es una estructura dinámica, por lo general te tocara hacerlo de forma manual, o como tu dices regenerar el dataset, esto es problemático si ya tienes desarrolladas algunas funciones o procedimientos especiales.

Yo lo que hago es que creo una clase que represente de la mejor manera al objeto, procedimiento, etc.
Por ejemplo:

Code: [Select]
  Public Class MiObjeto

   '' Defino los eventos que pueden ser utiles para dicho objeto

   Public Event Validating(sender as MiObjeto, e As CancelEventArgs)
   Public Event OnDeleting(sender as MiObjeto, e As CancelEventArgs)

   '' Defino las propiedades de dicha clase ó defino una variable

    Public privar as integer = 0
    Public segvar as string = String.Empty

   '' Defino los metodos que estaran permitidos para dicho objeto

    Public Function Insert() as Boolean
    End Function

    Public Function Delete() as Boolean
      '' Si hemos definido un evento ante la llamada a una función disparamos el evento según sea el caso y función de dicho evento
      Dim cancel As New CancelEventArg (False)
      RaiseEvent  OnDeleting(me, cancel)
      If cancel = True Then Exit Sub
     
      '' Si tengo una clase definida para para la eliminación (modelo MVC)
      ManagerMiObjeto.Delete(me)
     
      '' Si no estoy usando el model MVC, pues utiliza las instrucciones necesarias para ejecutar la sentencia llamando al procedimiento que
      '' has creado para administrar dichas peticiones.
    End sub

  End Class

Ahora bien, como ya tenemos nuestro objeto definido, con sus métodos y eventos pues simplemente basta con crear una instancia, recoger la información y invocar todos los métodos necesarios según convenga o según tu lógica de desarrollo.

Por ejemplo:

Quote
'' Si lo tengo declarado a nivel de formulario, modulo o clase (dependera como estes declarandolo)
 Private mObjeto As MiObjeto = New MiObjecto()

 Public Sub cmDeleteMiObjecto(sender as Object, e ...) handler cmDelete.Click
   mObjeto.Delete()
 End Sub
 


Es un poco mas tardado, pero como tu sabes cual es la logica, estructura y diseño, pues no se te hara dificil modificarlo segun lo necesites, es una manera, no puedo decir si la mejor, pero es a mi ver algo mejor que utilizar datasets

Offline Radiux

  • Sv Full Member
  • *
  • Posts: 939
Re:llamado de procedimiento almacenado en botones
« Reply #8 on: February 01, 2013, 10:01:52 pm »
estoy trabajando en vb.net 2010  lenguaje vb aplicacion cliente/servidor
los procedimientos almacenados anterior mente los trabajo  como menciona Radiux
pero cuando se arruina el dataset es el problema q hay q hacer todo de nuevo por eso quiero utilizar otra forma


Correcto esa es una de las desventajas de usar Datasets y por eso no es recomendable usarla, pero tampoco es la muerte, o sea, si cambias una tabla o sp lo borras del dataset y lo volves a arrastrar y ya queda actualizado.

Offline fre_saga

  • Sv Member
  • ***
  • Posts: 275
Re:llamado de procedimiento almacenado en botones
« Reply #9 on: February 04, 2013, 10:17:49 am »
ya estoy trabajando los procedimientos almacenados de esta forma pero me encuentro con este inconveniente
que no se como llenar un grid de la consulta almacenada

estoy probando asi
Try

            ObjConn.Open()

            Dim Comando = New SqlCommand("cargo_select", ObjConn)

            Comando.CommandType = CommandType.StoredProcedure
            dgvcargo.DataSource = Nothing
            dgvcargo.DataSource = Comando.ExecuteScalar
            dgvcargo.Refresh()

            ObjConn.Close()

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")

            ObjConn.Close()

        End Try

de esta forma guardo
Try

            ObjConn.Open()

            Dim Comando = New SqlCommand("cargo_insert", ObjConn)

            Comando.CommandType = CommandType.StoredProcedure

            Comando.Parameters.Add("@nombre", SqlDbType.VarChar)

            Comando.Parameters.Add("@descripcion", SqlDbType.VarChar)

            Comando.UpdatedRowSource = UpdateRowSource.None

            Comando.Parameters(0).Value = txtnombre.Text

            Comando.Parameters(1).Value = txtdescrip.Text

            Comando.ExecuteNonQuery()

            ObjConn.Close()

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")

            ObjConn.Close()

        End Try

Offline tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Posts: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:llamado de procedimiento almacenado en botones
« Reply #10 on: February 04, 2013, 01:58:04 pm »
y cuál es el error que te aparece?
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Offline murraybozinsky

  • Sv Jr.
  • **
  • Posts: 54
Re:llamado de procedimiento almacenado en botones
« Reply #11 on: February 04, 2013, 04:50:35 pm »
Bueno yo no utilizo mucho los datasets y mucho menos Dataset tipados, prefiero mejor manejarlos a codigo y sin esquemas.
en mi ejemplo utilize un Datatable de una forma sencilla y funcional.
la ventaja de los datasets que se crean de modo gráfico es que los puedo crear de una forma rápida y te pueden generar de un solo los metodos
insert, update, y delete pero el problema es cuando tu estructura de Tablas Cambia por x razón o porque está en desarrollo, entonces es incomodante
volver a reconfigurar.

Les comparto este manual que esta muy bueno y me ayudó bastante aun cuando estaba en la U.
al final en las ultimas paginas esta el manejo de datos con ADO .Net
Es básico verdad, si buscan algo mas avanzado no les va ayudar mucho.
talvez a alguien le sirva. :thumbsup:

http://www.mediafire.com/view/?gdcu84097ii6470