• Jueves 28 de Marzo de 2024, 16:33

Autor Tema:  Consultas sql en C#  (Leído 11920 veces)

Laxair

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re:Consultas sql en C#
« Respuesta #25 en: Sábado 10 de Diciembre de 2016, 20:16 »
0
Cuando apreto el botón ahora se cierra el formulario cosa que antes no pasaba pero sigue sin escribir en la bd.

chenech

  • Miembro activo
  • **
  • Mensajes: 96
    • Ver Perfil
Re:Consultas sql en C#
« Respuesta #26 en: Sábado 10 de Diciembre de 2016, 20:30 »
0
Cuando me pasaba eso quitaba los try catch e iba poniendo MessageBox.Show("1"), MessageBox.Show("2"), etc entre las líneas para ver donde llegaba y donde se para. O bien ejecuta la aplicación en debug línea por línea a ver donde se para o da error.

Laxair

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re:Consultas sql en C#
« Respuesta #27 en: Sábado 10 de Diciembre de 2016, 21:21 »
0
Ya me funciono, faltaba convertir los tipos nada mas dejo el código por si a alguien le sirve:

Código: [Seleccionar]
private void button1_Click(object sender, EventArgs e)
        {
            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =\"C:\\Users\\******\\Desktop\\Personal.accdb\"";
            OleDbCommand cmd;


            string consultaSQL = "INSERT INTO InasistenciasJefatura (Legajo, Estado, Fecha, Cargo, Turno, Aviso) VALUES (@Legajo, @Estado, @Fecha, @Cargo, @Turno, @Aviso)";
            cmd = new OleDbCommand(consultaSQL, conn);
            cmd.Connection = conn;
           
            try
            {
                conn.Open();
            }
            catch (Exception excepcion)
            {
                Console.Write(excepcion.Message);
                Console.ReadLine();
            }

           if (conn.State == ConnectionState.Open)
            {
               
                try
                {
                    cmd.Parameters.AddWithValue("@Legajo", Convert.ToInt32(txtLeg.Text.ToString()));
                    cmd.Parameters.AddWithValue("@Estado", txtEstado.Text.ToString());
                    cmd.Parameters.AddWithValue("@Fecha", Convert.ToDateTime(txtFecha.Text.ToString()));
                    cmd.Parameters.AddWithValue("@Cargo", Cargo.Text.ToString());
                    cmd.Parameters.AddWithValue("@Turno", txtTurno.Text.ToString());
                    cmd.Parameters.AddWithValue("@Aviso", txtAviso.Text.ToString());
                    cmd.ExecuteNonQuery();
                }
                catch (Exception excepcion)
                {
                    Console.Write(excepcion.Message);
                    Console.ReadLine();
                }

                conn.Close();


            }
        }
    }
}


Laxair

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re:Consultas sql en C#
« Respuesta #28 en: Sábado 10 de Diciembre de 2016, 23:06 »
0
Otra pregunta, como hago si quisiera registrar solo aquellos legajos que empiezan con un determinado numero?
Yo pense algo asi:

Código: [Seleccionar]
if (lector["Legajo"].ToString() == txtLeg.Text && txtLeg.Text.Substring(0,1)==3)
Pero me dice  Error   CS0019   Operator '==' cannot be applied to operands of type 'string' and 'int'   

EDIT: Agrego otra pregunta. Como hago para mostrar todos los registros de una base de datos acces en un textbox multilinea?

Código: [Seleccionar]
private void button1_Click(object sender, EventArgs e)
        {
            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =\"C:\\Users\\*******\\Desktop\\Personal.accdb\"";
            OleDbCommand comando;
            OleDbCommand comando2;
            OleDbCommand comando3;
            OleDbDataReader lector;
            OleDbDataReader lector2;
            OleDbDataReader lector3;

            string consultaSQL = "SELECT Legajo , Estado , Fecha , Cargo , Turno , Aviso FROM InasistenciasJefatura";
            string consultaSQL2 = "SELECT Legajo , Fecha , Estado , Hora , Aviso FROM InasistenciasBedel ";
            string consultaSQL3 = "SELECT Legajo , Fecha , Estado FROM InasistenciasSecretario ";
            comando = new OleDbCommand(consultaSQL, conn);
            comando2 = new OleDbCommand(consultaSQL2, conn);
            comando3 = new OleDbCommand(consultaSQL3, conn);
            try
            {
                conn.Open();
            }
            catch (Exception excepcion)
            {
                Console.Write(excepcion.Message);
                Console.ReadLine();
            }

            if (conn.State == ConnectionState.Open)
            {

                try
                {
                    lector = comando.ExecuteReader();
                    lector2 = comando2.ExecuteReader();
                    lector3 = comando3.ExecuteReader();
                    while (lector.Read())
                    {
                       
                            txtMostrar.Text = "\n" + lector.GetValue(0).ToString();
                            txtMostrar.Text += " - " + lector.GetValue(1).ToString();
                            txtMostrar.Text += " - " + lector.GetValue(2).ToString();
                            txtMostrar.Text += " - " + lector.GetValue(3).ToString();
                            txtMostrar.Text += " - " + lector.GetValue(4).ToString();
                            txtMostrar.Text += " - " + lector.GetValue(5).ToString();
                            txtMostrar.Text += "\r\n---------------------------------------------------------------------";
                        }
                            while (lector2.Read())

                            {
                                txtMostrar.Text += "\r\n" + lector2.GetValue(0).ToString();
                                txtMostrar.Text += " - " + lector2.GetValue(1).ToString();
                                txtMostrar.Text += " - " + lector2.GetValue(2).ToString();
                                txtMostrar.Text += " - " + lector2.GetValue(3).ToString();
                                txtMostrar.Text += " - " + lector2.GetValue(4).ToString();
                                txtMostrar.Text += " - " + lector2.GetValue(5).ToString();
                                         
                    }

                    while (lector3.Read())

                    {
                       
                        txtMostrar.Text += "\r\n" + lector3.GetValue(0).ToString();
                        txtMostrar.Text += " - " + lector3.GetValue(1).ToString();
                        txtMostrar.Text += " - " + lector3.GetValue(2).ToString();
           
                    }


                }
                catch (Exception excepcion)
                {
                    Console.Write(excepcion.Message);
                    Console.ReadLine();
                }

                conn.Close();
             

            }
        }


Eso me muestra hasta dos registros de tablas distintas el tercero no lo muestra y si hay dos o mas registros en una misma tabla solo te muestra el ultimo.
« última modificación: Domingo 11 de Diciembre de 2016, 01:11 por Laxair »

chenech

  • Miembro activo
  • **
  • Mensajes: 96
    • Ver Perfil
Re:Consultas sql en C#
« Respuesta #29 en: Domingo 11 de Diciembre de 2016, 15:12 »
0
Al tratar el dato como string debes poner el número tres entre comillas.

Laxair

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re:Consultas sql en C#
« Respuesta #30 en: Domingo 11 de Diciembre de 2016, 17:09 »
0
Gracias chenech, y tenes idea de la segunda pregunta que hice para mostrar todos los registros de la bd?

EDIT: Ya esta solucionado :D
   
Necesito ayuda con este codigo:
Código: [Seleccionar]
while (lector.Read())
                    {

                        if (lector["Legajo"].ToString() == txtLeg.Text && txtLeg.Text.Substring(0, 1) == "6" || txtLeg.Text.Substring(0, 1) == "3")
                        {
                           
                           
                                //if (lector["Cargo"].ToString() == Cargo.Text.ToString())

                                cmd.Parameters.AddWithValue("@Legajo", Convert.ToInt32(txtLeg.Text.ToString()));
                                cmd.Parameters.AddWithValue("@Estado", txtEstado.Text.ToString());
                                cmd.Parameters.AddWithValue("@Fecha", Convert.ToDateTime(txtFecha.Text.ToString()));
                                cmd.Parameters.AddWithValue("@Cargo", Cargo.Text.ToString());
                                cmd.Parameters.AddWithValue("@Turno", txtTurno.Text.ToString());
                                cmd.Parameters.AddWithValue("@Aviso", txtAviso.Text.ToString());
                                cmd.ExecuteNonQuery();
                            }
                        }

el if que esta comentado tiene problemas si lo pongo no entra nunca, Cargo en la bd es texto y Cargo en windows forms es un combobox, como hago?


EDIT:   
Código: [Seleccionar]
private void button1_Click(object sender, EventArgs e)
        {

            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =\"C:\\Users\\AsusB85M-G\\Desktop\\Personal.accdb\"";
            OleDbCommand cmdA;
            OleDbCommand cmdB;
            OleDbDataReader lector;

            string consultaSQLA = "INSERT INTO InasistenciasJefatura (Legajo, Estado, Fecha, Cargo, Turno, Aviso) VALUES (@Legajo, @Estado, @Fecha, @Cargo, @Turno, @Aviso)";
            string consultaSQLB = "SELECT Legajo,Cargo FROM Personal WHERE Legajo = @Legajo AND Cargo = @Cargo ";
            cmdA = new OleDbCommand(consultaSQLA, conn);
            cmdB = new OleDbCommand(consultaSQLB, conn);

            cmdA.Connection = conn;

            try
            {
                conn.Open();
            }
            catch (Exception excepcion)
            {
                MessageBox.Show(excepcion.Message);

            }

            if (conn.State == ConnectionState.Open)
            {

                try
                {

                    cmdB.Parameters.AddWithValue("@Legajo", Convert.ToInt32(txtLeg.Text.ToString()));
                    cmdB.Parameters.AddWithValue("@Cargo", Cargo.Text.ToString());

                    lector = cmdB.ExecuteReader();

                    while (lector.Read())
                    {
                        // Si el lector tiene valores significa que el legajo de la BD es == al del textBox y los cargos también son iguales

                        cmdA.Parameters.AddWithValue("@Legajo", Convert.ToInt32(txtLeg.Text.ToString()));
                        cmdA.Parameters.AddWithValue("@Estado", txtEstado.Text.ToString());
                        cmdA.Parameters.AddWithValue("@Fecha", Convert.ToDateTime(txtFecha.Text.ToString()));
                        cmdA.Parameters.AddWithValue("@Cargo", Cargo.Text.ToString());
                        cmdA.Parameters.AddWithValue("@Turno", txtTurno.Text.ToString());
                        cmdA.Parameters.AddWithValue("@Aviso", txtAviso.Text.ToString());
                        cmdA.ExecuteNonQuery();

                    }

                }

                catch (Exception excepcion)
                {
                    MessageBox.Show(excepcion.Message);
                }

                conn.Close();
                this.Close();

            }

        }

Ahí esta la solución a lo que pregunte :D


Si alguien me puede decir como contar los registros de un determinado legajo en la base de datos para sacar una estadística estaría muy agradecido :D


Hola denuevo se me ocurrio el siguiente codigo pero al parecer esta mal :
Código: [Seleccionar]
   string consultaSQLA = "SELECT Legajo FROM InasistenciasSecretario,  InasistenciasJefatura, InasistenciasDirector, InasistenciasBedel WHERE Legajo = " + txtLegajo.Text + ""; 
Quiero que comparar que el legajo de esas tablas (InasistenciasSecretario,  InasistenciasJefatura, InasistenciasDirector, InasistenciasBedel) sea igual al del textbox pero me dice esto: Puede que el campo 'Legajo' especificado haga referencia a más de una tabla de las mostradas en la cláusula FROM de la instrucción SQL.

« última modificación: Miércoles 14 de Diciembre de 2016, 01:12 por Laxair »

chenech

  • Miembro activo
  • **
  • Mensajes: 96
    • Ver Perfil
Re:Consultas sql en C#
« Respuesta #31 en: Jueves 15 de Diciembre de 2016, 22:13 »
0
Hola, cuando un campo es igual en mas de una tabla tienes que usar alias.
Esta consulta no tiene sentido:

  string consultaSQLA = "SELECT Legajo FROM InasistenciasSecretario,  InasistenciasJefatura, InasistenciasDirector, InasistenciasBedel WHERE Legajo = " + txtLegajo.Text + "";

No haces JOIN de las tablas.

Para contar los registros usa SELECT COUNT(LEGAJO) FROM TABLA WHERE ...

Un saludo.