Sv Community El Salvador
Soporte y Tecnología => Programación => .NET => Topic started by: fre_saga 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
-
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
-
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.
-
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?
If Conn.State = ConnectionState.Open Then
Conn.Close()
End If
Try
Conn.Open()
-
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?
-
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
-
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
-
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:
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:
'' 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
-
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.
-
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
-
y cuál es el error que te aparece?
-
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 (http://www.mediafire.com/view/?gdcu84097ii6470)