none
vb.net grabar en capas error

    Pregunta

  • bunos dias

    amigos del foro tengo un error si me pueden ayudar por favor no se porque me sale este al tratar de grabar una especialidad me sale este error 

    aplicacion registro especialidad colegio

    formulario de registro especialidad

    b.net 2015

    sql server

    3 capas

     Private Sub Grabar()
    
            Try
                If Not EsNuevo Then
                    objentidade.IdEspecialidad = Convert.ToInt32(LblIdEspecialidad.Text)
    
                End If
                objentidade.Especialidad = Convert.ToString(TxtEspecialidad.Text)
                objentidade.Esta = Convert.ToBoolean(ChkEstado.CheckState)
                If EsNuevo Then
                    Dim newEspecialidad As New Especialidad()
                    newEspecialidad = objnegocio.Insert(objentidade)  ' error al tratar de grabar
                    If newEspecialidad IsNot Nothing Then
                        If newEspecialidad.IdEspecialidad > 0 Then
                            MessageBox.Show("Registro grabado satisfactoriamente", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
    
                        Else
                            MessageBox.Show("Los datos no se grabaron", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error)
    
                        End If
    
                    Else
                        MessageBox.Show("Error al grabar los datos", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error)
    
                    End If
    
                Else
                    If objnegocio.Update(objentidade) Then
                        MessageBox.Show("Datos actualizados satisfactoriamente", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
    
                    Else
                        MessageBox.Show("Los datos no fueron actualizados", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    
                    End If
    
                End If
                limpiar()
                DgvLista.DataSource = objnegocio.GetAll()
    
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error)
    
            End Try


    Public Class Especialidad
        Private _IdEspecialidad As Integer
        Public Property IdEspecialidad() As Integer
            Get
                Return _IdEspecialidad
            End Get
            Set(ByVal value As Integer)
                _IdEspecialidad = value
            End Set
        End Property
        Private _Especialidad As String
        Public Property Especialidad As String
            Get
                Return _Especialidad
            End Get
            Set(ByVal value As String)
                _Especialidad = value
            End Set
        End Property
        Private _Esta As Boolean
        Public Property Esta As Boolean
            Get
                Return _Esta
            End Get
            Set(ByVal value As Boolean)
                _Esta = value
            End Set
        End Property
    


       Public Function Insert(eEspecialidad As Especialidad) As Especialidad
            Dim Conn As New SqlConnection(Conexion.Connectionstring)
            Dim Comando As New SqlCommand
            Try
                Conn.Open()
                Comando.CommandText = "INSERT INTO ESPECIALIDAD VALUES (@Especialidad,@Esta);Select @@IDENTITY"
                Comando.CommandType = CommandType.Text
                Comando.Connection = Conn
                Comando.Parameters.Add("@Especialidad", SqlDbType.VarChar).Value = eEspecialidad.Especialidad
                Comando.Parameters.Add("@Esta", SqlDbType.Bit).Value = eEspecialidad.Esta
                eEspecialidad.IdEspecialidad = Integer.Parse(Comando.ExecuteScalar().ToString())
            Catch ex As Exception
                Throw New Exception(ex.Message)
            Finally
                If Conn.State = ConnectionState.Open Then
                    Conn.Close()
                    Conn.Dispose()
                End If
            End Try
            Return eEspecialidad
        End Function

    tabla  Especialidad

    idEspecialidad

    Especialidad

    Esta

    jueves, 16 de marzo de 2017 13:20

Respuestas

  • aqui esta la respuesta

     
    Public Function ExisteEspecialidad(Especialidad As String) As Boolean
            Dim Conn As New SqlConnection(Conexion.Connectionstring)
            Dim Cmd As New SqlCommand
            Dim Result As Boolean = False
            Try
                Conn.Open()
                Cmd.CommandText = "Select Especialidad From ESPECIALIDAD Where Especialidad=@Especialidad"
                Cmd.CommandType = CommandType.Text
                Cmd.Connection = Conn
                Cmd.Parameters.Add("@Especialidad", SqlDbType.VarChar).Value = Especialidad ' este campo lo estaba poniendo como int esto estaba malo 
    
                Dim reader As SqlDataReader = Cmd.ExecuteReader
                If reader.HasRows Then
                    Result = True
                End If
                reader.Close()
            Catch ex As Exception
                Throw New Exception(ex.Message)
            End Try
            Return Result
        End Function
    

    • Marcado como respuesta djnilo jueves, 16 de marzo de 2017 17:04
    jueves, 16 de marzo de 2017 17:04

Todas las respuestas

  • Pues en esta linea:

    Comando.CommandText = "INSERT INTO ESPECIALIDAD VALUES (@Especialidad,@Esta);Select @@IDENTITY"

    Supongo que ESPECIALIDAD se llama la tabla pero no estas mencionando los campos sin embargo has colocado los valores te falta poner :

    Comando.CommandText = "INSERT INTO ESPECIALIDAD (Especialidad,Esta) VALUES (@Especialidad,@Esta)"

    Donde Asumo que Especialidad y Esta son partes de los campos de tu tabla Especialidad.

    Una referencia: "Insert Into Tabla (Campo1,Campo2) values (@campo1,@campo2)" para orientarte

    Dim textosqIngresar As New String(CType("Insert into Especialidad(Especialidad,Esta)values(@1,@2)", Char()))
    Dim cmda As New SqlCommand(textosqIngresar, cnx)
    
    cmda.Parameters.AddWithValue("@1", Me.txtEspecialidad.Text)
    cmda.Parameters.AddWithValue("@2", Me.chkEsta.Value)

    Saludos

    jueves, 16 de marzo de 2017 13:38
  • Pues en esta linea:

    Comando.CommandText = "INSERT INTO ESPECIALIDAD VALUES (@Especialidad,@Esta);Select @@IDENTITY"

    Supongo que ESPECIALIDAD se llama la tabla pero no estas mencionando los campos sin embargo has colocado los valores te falta poner :

    Comando.CommandText = "INSERT INTO ESPECIALIDAD (Especialidad,Esta) VALUES (@Especialidad,@Esta)"

    Donde Asumo que Especialidad y Esta son partes de los campos de tu tabla Especialidad.

    Una referencia: "Insert Into Tabla (Campo1,Campo2) values (@campo1,@campo2)" para orientarte

    Dim textosqIngresar As New String(CType("Insert into Especialidad(Especialidad,Esta)values(@1,@2)", Char()))
    Dim cmda As New SqlCommand(textosqIngresar, cnx)
    
    cmda.Parameters.AddWithValue("@1", Me.txtEspecialidad.Text)
    cmda.Parameters.AddWithValue("@2", Me.chkEsta.Value)

    Saludos

    gracias por responder Javier Roco

    pero sigue mandando el mismo error hice el cambio que recomendaste del insert 

    tabla ESPECIALIDAD Campos IdEspecialidad int , Especialidad varchar(100), esta bit

    jueves, 16 de marzo de 2017 14:13
  • Trabaja con parametros

    Comando.CommandType = CommandType.Text

    En vez de lo anterior usa

    Comando.CommandType = CommandType.StoredProcedure

    El id es autonumerico??? si no lo es deberias de mandarlo también dentro de SP!!


    William Lickez

    jueves, 16 de marzo de 2017 15:06
  • Trabaja con parametros

    Comando.CommandType = CommandType.Text

    En vez de lo anterior usa

    Comando.CommandType = CommandType.StoredProcedure

    El id es autonumerico??? si no lo es deberias de mandarlo también dentro de SP!!


    William Lickez

    gracias por responder William lickez

    pero errar un error de validacion de mi parte el campo lo estaba poniendo en int , y era string gracias

    jueves, 16 de marzo de 2017 17:03
  • aqui esta la respuesta

     
    Public Function ExisteEspecialidad(Especialidad As String) As Boolean
            Dim Conn As New SqlConnection(Conexion.Connectionstring)
            Dim Cmd As New SqlCommand
            Dim Result As Boolean = False
            Try
                Conn.Open()
                Cmd.CommandText = "Select Especialidad From ESPECIALIDAD Where Especialidad=@Especialidad"
                Cmd.CommandType = CommandType.Text
                Cmd.Connection = Conn
                Cmd.Parameters.Add("@Especialidad", SqlDbType.VarChar).Value = Especialidad ' este campo lo estaba poniendo como int esto estaba malo 
    
                Dim reader As SqlDataReader = Cmd.ExecuteReader
                If reader.HasRows Then
                    Result = True
                End If
                reader.Close()
            Catch ex As Exception
                Throw New Exception(ex.Message)
            End Try
            Return Result
        End Function
    

    • Marcado como respuesta djnilo jueves, 16 de marzo de 2017 17:04
    jueves, 16 de marzo de 2017 17:04