1

Estoy tratando de usar un web service creado en c# desde java visual. Estoy tratando de usarlas, pero me sale el siguiente error:

incompatible al tratar de hacer conversion de int a tipo string

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
       int matricula=Integer.parseInt(jTextField1.getText());
       jTextField2.setText(Integer.toString(consultaAlumno(matricula)));

    } 
[WebMethod]
    public string RegistrarAlumno(int matricula, String nombre, String apellidos, String edad, String carrera, String instituto)
    {
        SqlConnection cnn;
        String connetionString = "Data source=LPG\\MGPEXPRESS; Initial Catalog=escuela;Integrated Security=True";
        cnn = new SqlConnection(connetionString);


        try
        {
            cnn.Open();
        }
        catch
        {
            return ("Error al abrir conexion");
        }

        SqlCommand command = new SqlCommand("SELECT * FROM alumno " + "WHERE matricula=" + matricula, cnn);
        SqlDataReader reader = command.ExecuteReader();

        String Query;
        if (reader.HasRows)
        {
            return ("El alumno ya esta registrado");
        }
        else
        {
            Query = "Insert Into alumno(matricula, nombre, apellidos, edad, carrera, instituto)" + "values(" + matricula + ",'" + nombre + "','" + apellidos + "','" + edad + "','" + carrera + "','" + instituto + "')";
        }
        reader.Close();

        try
        {
            SqlCommand mycommand = new SqlCommand(Query, cnn);
            mycommand.ExecuteNonQuery();
            return ("Alumno registrado");
        }
        catch (Exception ex)
        {
            return ("No se pudo realizar consulta" + ex.Message);
        }
    }

    [WebMethod]
    public string ConsultaAlumno(int matricula)
    {
        SqlConnection cnn;
        String connetionString = "Data source=LPG\\MGPEXPRESS; Initial Catalog=escuela;Integrated Security=True";
        cnn = new SqlConnection(connetionString);
        try
        {
            cnn.Open();
            SqlCommand command = new SqlCommand("Select * from alumno " + "where matricula=" + matricula, cnn);
            SqlDataReader reader = command.ExecuteReader();

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    return (reader["nombre"].ToString() + "" +
                            reader["apellidos"].ToString() + "" +
                            reader["edad"].ToString() + "" +
                            reader["carrera"].ToString() + "" +
                            reader["instituto"].ToString());
                }
            }

            else
            {
                return ("No se encontre el alumno");
            }
            reader.Close();
            cnn.Close();
        }
        catch (Exception ex)
        {
            return ("No se pudo realizar consulta");
        }
        return matricula + "Hola";
    }


}
GDP
  • 2,723
  • 5
  • 20
  • 38
senseilex
  • 143
  • 6
  • 22
  • ¿En qué línea te sale el error? – Phi Nov 29 '17 at 06:14
  • En esta jTextField2.setText(Integer.toString(consultaAlumno(matricula))); – senseilex Nov 29 '17 at 06:48
  • 2
    Es un poco complicado poder ayudarte. Lo primero que deberías hacer es [edit] tu pregunta y añadir exactamente el texto de la excepción que te está lanzando. Por otro, tambien nos hacía falta ver el método `consultaAlumno` y ver como estás definiendo los websevices desde la aplicación en java. – Pikoh Nov 29 '17 at 08:17
  • @Pikoh El método `ConsultaAlumno` ya está puesto en la pregunta. Lo que pasa que con la `C` mayúscula. – Marc Nov 29 '17 at 09:49
  • @Marc ya, pero no creo que sea el mismo, ya que `ConsultaAlumno` es un metodo C# y desde donde lo llama es java. No controlo mucho de java, pero debe tener en alguna parte una definicion del webservice para poder consumir ese método – Pikoh Nov 29 '17 at 09:51
  • @Pikoh Entonces si es verdad mi respuesta estaría mal, la voy a dejar por si es eso y que lo aclare el OP. – Marc Nov 29 '17 at 09:52
  • @Marc Bueno, es posible que de todas maneras aunque falte código tu respuesta sea correcta, ya que efectivamente el método C# devuelve un string,con lo que el `Integer.ToString(consultaAlumno...)` le va a lanzar una excepción. – Pikoh Nov 29 '17 at 09:55

1 Answers1

1

Buenas senseilex,

Estás haciendo un Integer.toString() cuando realmente no lo necesitas, ya que la función consultaAlumno(matricula) devuelve una String.

El código debería quedar así:

jTextField2.setText(consultaAlumno(matricula));

Ten cuidado ya que en la función ConsultaAlumno haces directamente el return, sin cerrar conexion a la BD (cnn) ni el DataReader (reader) y eso te puede traer problemas más adelante. Deberías asignar el valor que lees a una variable y una vez hayas cerrado todo poner el return, por ejemplo:

[WebMethod]
public string ConsultaAlumno(int matricula)
{
    String resultado = "";
    SqlConnection cnn;
    String connetionString = "Data source=LPG\\MGPEXPRESS; Initial Catalog=escuela;Integrated Security=True";
    cnn = new SqlConnection(connetionString);
    try
    {
        cnn.Open();
        SqlCommand command = new SqlCommand("Select * from alumno " + "where matricula=" + matricula, cnn);
        SqlDataReader reader = command.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                resultado = (reader["nombre"].ToString() + "" +
                        reader["apellidos"].ToString() + "" +
                        reader["edad"].ToString() + "" +
                        reader["carrera"].ToString() + "" +
                        reader["instituto"].ToString());
            }
        }

        else
        {
            return ("No se encontre el alumno");
        }
        reader.Close();
        cnn.Close();
    }
    catch (Exception ex)
    {
        return ("No se pudo realizar consulta");
    }
    return resultado;
}
Marc
  • 5,005
  • 7
  • 17
  • 36
  • gracias compañero me sirvió mucho, si me hace la busqueda, de casulidad sabrias como hacer para que aparezca en cada jtextfield saliera cada campo de la tabla? – senseilex Nov 29 '17 at 16:08
  • 1
    @senseilex eso es una nueva pregunta, pero de todas maneras lo que debes hacer es modificar el método `ConsultaAlumno` en C# para que en lugar de unir cada columna con `""` lo unas con otro separador(por ejemplo `"-"` y luego en el lado java hagas un Split de lo que te devuelve el método para poder separar cada dato en un jtextfield diferente. Ah, y no se te olvide aceptar esta respuesta si solucionó tu problema :) – Pikoh Nov 29 '17 at 16:29
  • compañero como seria el split en java? o si quieres hago otra pregunta – senseilex Nov 29 '17 at 16:35
  • @senseilex como quieras, pero [en esta pregunta](https://es.stackoverflow.com/q/45846/15301) ya lo tienes explicado – Pikoh Nov 29 '17 at 16:41