Visual Basic.NET - Store Procedures con Visual Basic 2010...URGENTE!!!!

 
Vista:
sin imagen de perfil

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Pedro Canizales (8 intervenciones) el 29/06/2017 17:40:13
Hola buen dia
estoy en crisis y desesperado, les explico
se tenia un programa para imprimir pesos de una bascula en lejguaje Delphi, por cuestiones de cambio de personal las fuentes se perdieron, decidi hacer un programa nuevo pero en visual Basic 2010, son nuevo en este lenguaje. tengo mis bases de datos en SQL Server 2012 y existen store procedures que realizan la busqueda e insercion de datos.
tengo la interface hecha y ya puedo leer los pesos de la bascula por el puerto com.
pero quiero realizar la busqueda de ese NUMERO DE CONTROL, presionando el button1, que aparezca un inputbox, al dar clic en aceptar, buscar o ejecutar el SP para realizar la busqueda y ese DATO ponerlo en un textbox
pero no se como hacer la busqueda por SP desde Visual Basic 2010, alguien me pudiera ayudar...ya tengo la
conexion a mi BD en un modulo conexion.vb

1
2
3
4
5
6
7
8
9
10
Sub abrir()
    Try
        conexion = New SqlConnection("Data Source=10.200.6.9;Initial Catalog=Mecano_Rimsa_Mina_PR;User ID=sa;Password=Rimsamty$8506")
        conexion.Open()
        'MsgBox("Conexion exitosa a la Base de Datos Mecano")
 
    Catch ex As Exception
        MsgBox("No se conecto a la Base de Datos" + ex.ToString)
    End Try
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 30/06/2017 17:14:37
Debes hacer uso de un SqlCommand, en el cual poner el nombre de tu store procedure en la propiedad commandtext, y en commandtype, especificar que es un store procedure.

Agregar los parámetros si es que lo recibe el store procedure.

Luego leer los datos mediante un SqlDatareader y asunto solucionado.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Pedro Canizales (8 intervenciones) el 30/06/2017 17:20:47
llevo esta parte pero estoy atorado como leer mediante un SqlDataReader y que me muestre el resultado de la busqueda en TextBox que tengo
esta funcion la mando llamar desde el button1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Function Buscar_Control(ByVal Id_Control As String, ByVal Tipo_Mov As String, Version As Integer)
    Dim Salida As String = "Registro Encontrado"
    Try
        enunciado = New SqlCommand("SisBascula_CargaControl", conexion)
        enunciado.CommandType = CommandType.StoredProcedure
        With enunciado.Parameters
            .AddWithValue("@Id_Control", Id_Control)
            .AddWithValue("@Tipo_Mov", "1")
            .AddWithValue("@Version", 2)
        End With
        enunciado.ExecuteNonQuery()
    Catch ex As Exception
        Salida = "No se encontro registro: " + ex.ToString
    End Try
    Return Salida
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 30/06/2017 17:27:30
Pues con esta línea

enunciado.ExecuteNonQuery()

Lo único que estás haciendo, es mandar a ejecutarse el sqlCommand, pero nada mas, eso tendría sentido si es que estás ejecutando una consulta de acción, pero como en tu caso es una consulta que devuelve datos, entonces debes tener un mecanismo en donde recibirlos, entonces para ese caso entra en juego el sqlDatareader.

1
2
3
4
5
6
7
8
Dim reader as SQLDatareader=enunciado.ExecuteReader
 
if reader.hasrows ---Significa que hay datos dependiendo de la cantidad, si es una fila o varias.
if reader.read
 IdDeAlgo=reader.getInt32(0)
NombreDeAlgo=reader.getString(1)
endif
reader.close

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Pedro Canizales (8 intervenciones) el 30/06/2017 21:38:53
prgunta el getString(0) y getString(1) a que hace referencia? es decir, como puedo saber en mi resultado de busqueda a que indice pertenece mi campo que quiero que aparezca


IdDeAlgo=reader.getInt32(0)
NombreDeAlgo=reader.getString(1)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 01/07/2017 00:41:24
Eso lo sabes según la consulta que has armado.

Si haces por ejemplo un procedimiento almacenado en el cual haces una consulta mas o menos así:

Select IdCliente,NombreCliente From Clientes, cual crees que vendrá primero?, el nombre o el id?.,

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por omar (166 intervenciones) el 30/06/2017 17:16:32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Sub Insertar ()
Dim _connection as SqlConnection
_connection.ConnectionString = 'cadena de conexión a tu Base de Datos' 
_connection.Open
 
Dim _command as Object = _connection.CreateCommand
_command.commandText = 'nombre de tu procedimiento almacenado' 
_command.commandType = CommandType.StoredProcedure
 
_command.Parameters.Add ( New SqlCliente.SqlParameter('nombreParametro1', valor1)) 
_command.Parameters.Add ( New SqlCliente.SqlParameter('nombreParametro2', valor1)) 
...
_command.ExecuteNonQuery
_connection.Close
End Sub

modifica este ejemplo de otro usuario que agrego en este foro

espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Pedro Canizales (8 intervenciones) el 30/06/2017 19:06:02
perdon en las lineas
_command.Parameters.Add ( New SqlCliente.SqlParameter("@Id_Control", valor1)) que es valor1
_command.Parameters.Add ( New SqlCliente.SqlParameter('"@Tipo_Mov", valor1)) que es valor 1
y la otra pregunta como asigno esos valores a mi textbox en pantalla?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 01/07/2017 00:46:10
Si tu mismo has escrito el código arriba.

Si te fijas Valor1 hace referencia a tu valor por ejemplo Id_Control que has escrito en tu segundo post.

Son ejemplos que se te da con la idea que entiendas la sintaxis, ya que no sabemos como se llaman tu datos ni tus parámetros.

Ahora para poner los valores devueltos en tus textbox, según lo que te indiqué en el post anterior eso que decía IddeAlgo, ese es el valor, ya depende de ti si lo metes a un textbox a un label o lo que mejor te parezca.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Pedro (8 intervenciones) el 03/07/2017 17:55:19
el objetivo del programa es el siguiente, programa que esta abierto las 24 hrs del dia) ya que los embarques ingresan durante las 24 horas
mi programa tiene 4 botones, Peso Bruto(Entrada), Peso Tara(Salida),Impresion y Deshacer
mi idea es poner un Inputbox para que el usuario ingrese el Numero de Control a Buscar(Id_Control)
SI el embarque viene de ingreso(Peso Bruto), entonces,
Clic al boton PESO BRUTO y que me aparezca un Inputbox para ingresar el num de control, en ese momento hago llamar al SP que se llama Sisbascula_CargaControl, que recibe 3 parametros (Id_Control, Tipo_Mov y Version), como constantes Tipo_Mov=1 y Version=2
el SP recibe los argumentos y busca el Num. de Control(Id_Control), si no existe muestra los datos del embarque en pantalla, (previamente capturados)los campos a mostrar son
Num,Control(Id_Control) TextBox
Folio Ticket (Id_Ticket) TextBox
NCA (NCA) - Textbox
Tipo de Embarque(Tipo_Embarque) -TextBox
Placa Tractor (Placa_Tractor) Textbox
Placas1 (Placa_Jaula1) TextBox
Placas2 (Placa_Jaula1) TextBox
Cliente (Nombre_Cliente (ComboBox)
Transpsortista (Transportista) - ComboBox
Chofer (Nombre_Operador) TextBox
Pesador (Pesador) TextBox

si el embarque ya existe debera de mostrar mensaje que ya existe y deshabilita los campos

posterior a esto el pesador pone su nombre y debera poner clic al boton imprimir para la impresion del ticket de bascula, que debera de tener los datos arriba mencionados mas el peso y la fecha de pesaje, que se muestran en textbox diferentes

si el embarque no existe y no esta capturado, debera mostrar el Mensaje de que el embarque no existe pero se debera capturar manualmente, se deberan de poner todos los campos habilitados y en blanco. al terminar de capturar los campos imprimir el ticket dando clic al boton imprimir.

al salir el embarque ingreso el numero de control a pesar debera de mostrar los datos del embarque en pantalla y clic al PESO TARA e impirmir la segunda pesada, espero me haya dado a entender con esta explicacion de lo que requiero que haga el programa muesto mi codigo, no me esta mostrando la informacion, obviamente algo no esta bien

Imports System.Data
Imports System.Data.Sql
Imports System.Data.SqlClient
Imports System.Windows.Forms
Public Class Form1

Public conexion As New SqlConnection 'encargada de realizar la conexion
Public enunciado As SqlCommand ' permite ejecutar sentencias sql como insert, update, delete, select
Public respuesta As SqlDataReader 'se encarga de poder recorrer los registros de una consulta

Private ComBuffer As Byte()
Private Delegate Sub UpdateFormDelegate()
Private UpdateFormDelegate1 As UpdateFormDelegate

Public Id_Control As String
'Creamos las variables a usar en el procedimiento de UpdateDisplay
Dim strReturn As String
Dim strPeso As String
Dim car As String

Dim TipoMov As String
Dim Sqlstring As String

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Abrir_Conexion()
LlenarComboBoxClientes(CbClientes)
LlenarComboBoxTransporte(CbTransportista)
Me.lblHora.Text = String.Format("{0:HH:mm:ss}", DateTime.Now)
Timer1.Interval = 1000
Timer1.Start()
Timer2.Interval = 1000
Timer2.Start()
TraeConfiguracion()
'abro el puerto
If Not PuertoSerial.IsOpen Then
PuertoSerial.Open()
End If
LimpiaCambios()
End Sub
Private Sub TraeConfiguracion()
PuertoSerial.PortName = "COM1" 'puerto de comunicacion
PuertoSerial.BaudRate = "9600" 'velocidad
PuertoSerial.DataBits = "8" 'bits de paridad
PuertoSerial.StopBits = "1" 'bits de parada
End Sub
Private Sub PuertoSerial_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles PuertoSerial.DataReceived
Dim Cuenta_Bytes_Leidos As Integer
Try
UpdateFormDelegate1 = New UpdateFormDelegate(AddressOf UpdateDisplay)
Cuenta_Bytes_Leidos = PuertoSerial.BytesToRead 'capturo el numero de bytes leidos
If Cuenta_Bytes_Leidos > 50 Then
ComBuffer = New Byte(Cuenta_Bytes_Leidos - 1) {} 'redimensiono
PuertoSerial.Read(ComBuffer, 0, Cuenta_Bytes_Leidos) 'leemos el dato
Me.Invoke(UpdateFormDelegate1)
End If

Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub UpdateDisplay()
'variables locales
Dim incoming As String = ""
Dim longBuffer As Long
Dim i As Integer

'calcularmos la longitud del buffer y guardamos la información en una variable
longBuffer = ComBuffer.Length
For i = 0 To longBuffer - 1
incoming = incoming & Chr(ComBuffer(i))
Next
strReturn = incoming.ToString

'ahora solo tenemos que formatear la cadena tal como deseemos.
'Yo conecte el puerto a una báscula por tanto necesito capturar el dato del pesaje
'------------------------------------------------
If strReturn.Length > 2 Then
i = 0
strPeso = ""
Dim blnLeyoNumero As Boolean
For i = 1 To strReturn.Length
car = Mid(strReturn, i, 1)
If IsNumeric(car) Or car = "." Then
strPeso = strPeso & car
blnLeyoNumero = True
Else
If blnLeyoNumero Then Exit For
End If
Next
End If
'--------------------------------------------------
'Listo ahora el dato lo mostramos en la cajita de texto, ahora si a probarlo
Me.lblPeso.Text = strPeso
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
LimpiaCambios()
TipoMov = "1"
Me.Button2.Enabled = False
Me.Button3.Enabled = True
Me.Button4.Enabled = True
Id_Control = InputBox("Favor de Ingresar el Número de Control", "Identificacion de Número de Control")
Buscar_Control(Id_Control, TipoMov, 2)

End Sub

Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Label18.Text = TimeOfDay.TimeOfDay.ToString
Label19.Text = DateString
'Me.lblHora.Text = String.Format("{0:HH:mm:ss}", DateTime.Now)
Me.lblHora.Text = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss")
End Sub

Private Sub GroupBox1_Enter(sender As System.Object, e As System.EventArgs) Handles GroupBox1.Enter

End Sub

Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
Me.lblPeso.Text = strPeso
End Sub

Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
LimpiaCambios()

End Sub

Private Sub LimpiaCambios()
Me.Button1.Enabled = True
Me.Button2.Enabled = True
Me.Button3.Enabled = False
Me.Button4.Enabled = False

Me.txtControl.Text = ""
Me.txtNCA.Text = ""
Me.txtNCA.Text = ""
Me.CboEmbarque.SelectedIndex = -1
Me.txtTractor.Text = ""
Me.txtPlaca1.Text = ""
Me.TxtPlaca2.Text = ""
Me.CbClientes.SelectedIndex = -1
Me.CbTransportista.SelectedIndex = -1
Me.TxtChofer.Text = ""
Me.TxtPesador.Text = ""
End Sub
Private Sub Abrir_Conexion()
Try
conexion = New SqlConnection("Data Source=XX.XX.X.X;Initial Catalog=Mecano_Rimsa_Mina_PR;User ID=sa;Password=************")
conexion.Open()
'MsgBox("Se conecto a la Base de Datos")
Catch ex As Exception
MsgBox("No se conecto a la Base de Datos" + ex.ToString)
End Try
End Sub

Private Sub LlenarComboBoxClientes(ByVal Cb As ComboBox)
Try
enunciado = New SqlCommand("Select Nombre From Mina_Clientes", conexion)
respuesta = enunciado.ExecuteReader

While respuesta.Read
Cb.Items.Add(respuesta.Item("Nombre"))
End While
respuesta.Close()
Catch ex As Exception
MsgBox("Error al Consultar" + ex.ToString)
End Try
End Sub

Private Sub LlenarComboBoxTransporte(ByVal Cb As ComboBox)
Try
enunciado = New SqlCommand("Select Nombre From Mina_Transportistas", conexion)
respuesta = enunciado.ExecuteReader

While respuesta.Read
Cb.Items.Add(respuesta.Item("Nombre"))
End While
respuesta.Close()

Catch ex As Exception
MsgBox("Error al consultar" + ex.ToString)
End Try
End Sub

Function Buscar_Control(ByVal Id_Control As String, ByVal Tipo_Mov As String, Version As Integer)
Dim Salida As String = "Registro Encontrado"
Dim da As SqlDataAdapter = New SqlDataAdapter("Select * From Mina_Reg_Bascula Where Id_Control=@Id_Control", conexion)
Dim LlenaDatos As DataSet = New DataSet
da.Fill(LlenaDatos)

txtControl.DataBindings.Add(New Binding("Text", LlenaDatos, "Mina_Reg_Bascula.Id_Control.Id_Control"))
Dim Salida As String = "Registro Encontrado"
Dim Dt As DataTable
Try
enunciado = New SqlCommand("SisBascula_CargaControl", conexion)
enunciado.CommandType = CommandType.StoredProcedure
With enunciado.Parameters
.AddWithValue("@Id_Control", Id_Control)
.AddWithValue("@Tipo_Mov", "1")
.AddWithValue("@Version", 2)
End With
enunciado.ExecuteNonQuery()
Dim Reader As SqlDataReader = enunciado.ExecuteReader
If Reader.HasRows Then
If Reader.Read Then
txtControl.Text = Reader.GetString(0)
txtNCA.Text = Reader.GetString(12)
txtTractor = Reader.GetString(13)
txtPlaca1 = Reader.GetString(14)
TxtPlaca2 = Reader.GetString(15)
TxtPesador.Text = Reader.GetString(16)
TxtChofer.Text = Reader.GetString(14)

End If
Reader.Close()
End If
Catch ex As Exception
Salida = "No se encontro registro: " + ex.ToString
End Try
Return Salida
End Function
End Class





sisbascula
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Pedro (8 intervenciones) el 03/07/2017 21:14:32
hola que tal Wilfredo cambie un poco el codigo...puse esto en el boton Peso_Bruto
y donde tengo el error
lo marca en la linea
1
oDataReader = oCommand.ExecuteReader
"EL PROCEDIMIENTO O LA FUNCION SISBASCULA_CARGACONTROL ESPERABA EL PARAMETRO @TIPO_MOV, QUE NO SE HA ESPECIFICADO"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub BtnPeso_Bruto_Click(sender As System.Object, e As System.EventArgs) Handles BtnPeso_Bruto.Click
    LimpiaCambios()
    TipoMov = "1"
    Me.Button2.Enabled = False
    Me.Button3.Enabled = True
    Me.Button4.Enabled = True
    Id_Control = InputBox("Favor de Ingresar el Número de Control", "Identificacion de Número de Control")
    Dim oCommand As New SqlCommand("Exec SisBascula_CargaControl '" + Trim(Id_Control) + "'" + "'" + TipoMov + "'" + "'2'", conexion)
    Dim oDataReader As SqlDataReader
    oDataReader = oCommand.ExecuteReader
    While oDataReader.Read
        txtControl.AppendText(Trim(oDataReader("Id_Control")))
        txtTicket.AppendText(Trim(oDataReader("Id_Ticket")))
        txtNCA.AppendText(Trim(oDataReader("Nca")))
        txtTractor.AppendText(Trim(oDataReader("Placa_Tractor")))
        txtPlaca1.AppendText(Trim(oDataReader("Placa_Jaula1")))
        TxtPlaca2.AppendText(Trim(oDataReader("Placa_Jaula2")))
        TxtChofer.AppendText(Trim(oDataReader("Nombre_Operador")))
        TxtPesador.AppendText(Trim(oDataReader("Pesador")))
    End While
    oDataReader.Close()
    conexion.Close()
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 04/07/2017 15:57:01
Lo que te fata e proporcionar el parámetro tipo_mov, tienes que ver en que posicion te lo pide el store procedure y pasarle ese parámetro.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Pedro (8 intervenciones) el 04/07/2017 16:36:10
el SP esta estructurado asi


1
2
3
4
ALTER   Procedure [dbo].[SisBascula_CargaControl]
	@Id_Control Char (8),
	@Tipo_Mov Char (1),
	@Version Int=1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Store Procedures con Visual Basic 2010...URGENTE!!!!

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 04/07/2017 23:53:12
1
2
3
4
5
6
7
8
9
10
dim oCommand as New SqlCommand
oCommand.CommandText="SisBascula_CargaControl"
oCommand.CommandType=CommandType.StoreProcedure
oCommand.Connection=conexion
oCommand.Parameters.Add("@Id_Control",SqlDbType.Char).Value=Id_Control
oCommand.Paramerters.Add("@Tipo_Mov",SqlDbType.Char).Value=TipoMov
oCommand.Paramerters.Add("@@Version",SqlDbType.Int).Value=2
 
Dim oDataReader As SqlDataReader
oDataReader = oCommand.ExecuteReader

Listo, con eso no tendrás problemas, cambia tu código

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar