SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: Laxair en Jueves 8 de Diciembre de 2016, 16:32

Título: Consultas sql en C#
Publicado por: Laxair en Jueves 8 de Diciembre de 2016, 16:32
Muy buenas tardes, estoy haciendo un programa que registra novedades como por ejemplo :
a.   La fecha.
b.   El empleado.
c.   Si se trata de inasistencia, llegada tarde o retiros anticipado.
d.   Si ha sido con aviso previo o no.
e.   Si se trata de módulos profesor, qué horas de la jornada están afectadas (las horas se numeran de la 1ª a la 9ª). Ejemplo: 05/10/16 – Ing. Gómez, Carlos – Ausente (Sin Aviso) – 1ª hora.
f.   Si se trata de cargos, el tipo del mismo. Ejemplo: 05/10/16 – Perré, Adrián – Retiro Anticipado (Con Aviso) – Cargo de Bedel.

Lo estoy haciendo con Windows Forms en visual basic 2015, y tengo los datos en una bd hecha en access, el principal problema que tengo es que nose como comparar lo ingresado en un textbox con un dato de la base de datos, por ejemplo: Ingreso un legajo en el textbox y quiero compararlo con la columna de legajos en la bd y si son iguales hacer alguna otra cosa.


Intente con este codigo pero tiene errores de sintaxis y me dice que txtLegajo es inaccesible por el nivel de protección.
Código: [Seleccionar]
string comando = "SELECT * FROM Personal WHERE Legajo LIKE'" + txtLegajo.text + '");

Desde ya muchas gracias.



EDIT:         Hola denuevo, le hice unos retoques al codigo me quedo asi:
   
Código: [Seleccionar]
private void button1_Click(object sender, EventArgs e)
        {
            string comando = "SELECT * FROM Personal WHERE Legajo LIKE'" + txtLegajo.Text + "')";
            if (comando)
            {
                Form2 segundo = new Form2();
                segundo.ShowDialog();
            }

me dice que no se puede convertir de string a bool, como hago?
Y otra cosa lo de la conexión con la bd donde la hago? en una clase aparte o dentro del mismo form.
Título: Re:Consultas sql en C#
Publicado por: chenech en Jueves 8 de Diciembre de 2016, 18:53
Hola, tienes un paréntesis cerrado al final y no veo uno abierto antes.
Estas asignando la instrucción SELECT al string comando pero no se donde la ejecutas para comprobar el resultado, no conozco Visual Basic pero me imagino que comando debes ejecutarlo en algún sitio y comprobar el resultado, en el código que pones comando valdrá el valor que le has asignado y no true/false.
Título: Re:Consultas sql en C#
Publicado por: Laxair en Jueves 8 de Diciembre de 2016, 19:04
Si el paréntesis fue error de tipeo, y lo otro no se como hacer la condición, osea yo quiero que si lo que pongo en el textbox es igual a lo que esta en la columna Legajo se abra el segundo formulario.Como debería hacer?
Título: Re:Consultas sql en C#
Publicado por: chenech en Jueves 8 de Diciembre de 2016, 19:35
Es que no se en Visual Basic como se ejecuta una sentencia SQL, deberias ejecutar la sentencia siguiente que te devuelve el contenido de Legajo y compararlo. Sería algo así, lo que no se como sejecuta.

Código: [Seleccionar]
"SELECT Legajo FROM Personal WHERE Legajo ='" + txtLegajo.Text + "'";
si(<Resultado de la SQL> es igual a txtLejago.Text)
  {
    Form2 segundo = new Form2();
    segundo.ShowDialog();
  }
Título: Re:Consultas sql en C#
Publicado por: Laxair en Jueves 8 de Diciembre de 2016, 20:48
Mil perdones , no es visual basic es visual studio 2015.
Título: Re:Consultas sql en C#
Publicado por: chenech en Jueves 8 de Diciembre de 2016, 23:43
Hola de nuevo, no tengo compilador para probar pero prueba este código, en sbQuery asigno la sentencia SQL, luego se la asigno al comando a ejecutar y luego compruebo si es igual. antes asigna a conn el string de conexión.

Código: [Seleccionar]
               SqlCeConnection conn = new SqlCeConnection();
               StringBuilder sbQuery = new StringBuilder();
               SqlCeCommand cmd = new SqlCeCommand();
               IDataReader dr;

                sbQuery.Append("SELECT Legajo FROM Personal WHERE Legajo = " + txtLegajo.Text + "'");
                cmd.CommandText = sbQuery.ToString();
                cmd.Connection = conn;
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    if (dr["Legajo"].ToString() == txtLegajo.Text)
                   {
                     Form2 segundo = new Form2();
                     segundo.ShowDialog();
                   }
                }
                dr.Close();


Título: Re:Consultas sql en C#
Publicado por: Laxair en Viernes 9 de Diciembre de 2016, 16:02
Ese código que pusiste iría en el form? mas precisamente en el botón que tiene el formulario o en otra parte? Y otra cosa ese codigo se puede hacer con OledbConnection?
Y OleDbDataReader es lo mismo que IDataReader ???
Y una ultima cosa no entendi lo de asignar el string de conexion a conn  esta seria la ruta:   Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\*******\Desktop\Personal.accdb
Título: Re:Consultas sql en C#
Publicado por: chenech en Viernes 9 de Diciembre de 2016, 16:39
El ejemplo que te puse es de algo echo por mi hace mucho tiempo, ya no uso C#, fue echo para SQL CE de unas PDA, supongo que será equivalente al Ole pero no te lo puedo asegurar, si alguien por aquí domina el tema y opine mejor, y sí, en conn va el string de conexión que has puesto.
En cuanto a ponerlo en el Form o en el evento del click de ratón depende de como quieras, si lo haces en el click, abres la base de datos, compruebas y cierras la conexión, si lo hacen el el Form al crearlo, por ejemplo, define las variables generales y mantienes abierto el cursor a la base de datos hasta que tu quieras o se cierre el programa.
De todas formas, si alguien por aquí lee esto y conoce el C# mejor que opine, lo que te digo yo es de memoria y de hace años.
Un saludo.
Título: Re:Consultas sql en C#
Publicado por: Laxair en Viernes 9 de Diciembre de 2016, 16:58
Me tira error el reader, dice que requiere una conexión abierta y disponible, pero ahí en la imagen creo que la tengo abierta.
Título: Re:Consultas sql en C#
Publicado por: chenech en Viernes 9 de Diciembre de 2016, 17:08
Lo que veo distinto es que yo el string se lo muevo luego y no en la creación como tu, yo lo tengo así:

conn.ConnectionString = "Data Source= " + ruta + "ChenWM.sdf;";

Prueba a quitarlo de la declaración y añadirlo luego del new a ver.
Título: Re:Consultas sql en C#
Publicado por: Laxair en Viernes 9 de Diciembre de 2016, 18:14
No entendí, luego de cual new? Y la declaración te referís a cadconexion?
Título: Re:Consultas sql en C#
Publicado por: chenech en Viernes 9 de Diciembre de 2016, 18:21
despues de
SqlCeConnection conn = new SqlCeConnection();
Título: Re:Consultas sql en C#
Publicado por: Laxair en Viernes 9 de Diciembre de 2016, 20:53
Bueno lo que hice fue hacer un bloque try-catch :

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\"";
            StringBuilder sbQuery = new StringBuilder();
            OleDbCommand cmd = new OleDbCommand();
            OleDbDataReader lector;

            string consultaSQL = "SELECT Legajo FROM Personal WHERE Legajo = " + txtLegajo.Text + "'";
            cmd.CommandText = sbQuery.ToString();
            cmd.Connection = conn;

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

            if (conn.State == ConnectionState.Open)
            {
               
                try
                {
                    lector = cmd.ExecuteReader();
                    while (lector.Read())
                    {
                        if (lector["Legajo"].ToString() == txtLegajo.Text)
                        {
                            Form2 segundo = new Form2();
                            segundo.ShowDialog();
                        }
                    }
                }
                catch (Exception excepcion)
                {
                    Console.Write(excepcion.Message);
                    Console.ReadLine();
                }

                conn.Close();

            }
        }
    }
}

Al primer if entra el de  if (conn.State == ConnectionState.Open) pero el segundo donde se desea comparar parece que no porque no me abre el formulario.
Título: Re:Consultas sql en C#
Publicado por: chenech en Viernes 9 de Diciembre de 2016, 21:47
Pon un else que display algo a ver si es que no existe el legajo

Código: [Seleccionar]
                        if (lector["Legajo"].ToString() == txtLegajo.Text)
                        {
                            Form2 segundo = new Form2();
                            segundo.ShowDialog();
                        }
                        else
                            ...
Título: Re:Consultas sql en C#
Publicado por: Laxair en Viernes 9 de Diciembre de 2016, 21:53
Puse en el else que se abriera el segundo formulario y nada, la base de datos esta con datos ya, y puse el mismo legajo que aparece en ella.
Título: Re:Consultas sql en C#
Publicado por: Laxair en Viernes 9 de Diciembre de 2016, 22:33
Holaaaaaaaaaaaaaaaaaaaaaaaaaaaaa alfin encontre lo que estaba mal gracias Chenech por la paciencia y la ayuda.
El error estaba en las comillas de :

Código: [Seleccionar]
string consultaSQL = "SELECT Legajo FROM Personal WHERE Legajo = " + txtLegajo.Text + "";
no llevaba comillas simples.
Título: Re:Consultas sql en C#
Publicado por: chenech en Sábado 10 de Diciembre de 2016, 00:22
Vaya, bueno por lo menos funcionó.
Un saludo.
Título: Re:Consultas sql en C#
Publicado por: Laxair en Sábado 10 de Diciembre de 2016, 16:07
Tengo otra duda, ahora lo que quiero hacer es insertar datos desde los windows form a la bd tengo el siguiente codigo hasta ahora :

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 cmd;
           

            string consultaSQL = "INSERT INTO InasistenciasJefatura (Legajo,Estado,Fecha,Cargo,Turno,Aviso) VALUES " + txtLeg.Text + ""+ txtEstado.Items + "" + txtFecha.Text +""+ Cargo.Items + ""+ txtTurno.Text  + "" + txtAviso.Text+ "" ;
            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.ExecuteNonQuery();
                }
                catch (Exception excepcion)
                {
                    Console.Write(excepcion.Message);
                    Console.ReadLine();
                }

                conn.Close();


            }
        }
    }
}


Seguramente hay algún error en la consulta.


Ah y otra cosa si tengo mas de una tabla en la bd es necesario poner el nombre del archivo (Personal) y la tabla a usar? por ejemplo Personal.InasistenciasJefatura.
Título: Re:Consultas sql en C#
Publicado por: chenech en Sábado 10 de Diciembre de 2016, 16:59
aquí tienes un ejemplo de como lo hacía yo pasando los parámetros a la sentencia SQL, no debes ejecutar el Open() este es para consultas SELECT que devuelven resultado, para UPDATE e INSERT es con ExecuteNonQuery.
Código: [Seleccionar]
                    sbQuery = new StringBuilder("");
                    sbQuery.Append("INSERT INTO Inventario VALUES(@PAlmacen, @PFecha, @PArticulo, @PUnidades)");
                    cmd.CommandText = sbQuery.ToString();
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@PAlmacen", tbAlmacen.Text);
                    cmd.Parameters.AddWithValue("@PFecha", dtFecha.Value.Date);
                    cmd.Parameters.AddWithValue("@PArticulo", tbArticulo.Text);
                    cmd.Parameters.AddWithValue("@PUnidades", dUnidades);
                    cmd.Connection = conn;
                    cmd.ExecuteNonQuery();
Título: Re:Consultas sql en C#
Publicado por: Laxair en Sábado 10 de Diciembre de 2016, 17:28
PAlmacen , PFecha , etc esos que son? son las columnas de la base de datos?

Y lo del Open(), no es que lo tengo que hacer siempre porque es para abrir la conexión?
Título: Re:Consultas sql en C#
Publicado por: chenech en Sábado 10 de Diciembre de 2016, 18:01
Perdón, si, el Open hay que hacerlo, estaba confundido.
@PAlmacen es el parámetro a pasar y tbAlmacen.Text es el valor del dato en el form.
En el INSERT no pongo los datos de la base de datos por que se los paso igual que están en la BD, podría ser así también:

sbQuery.Append("INSERT INTO Inventario (Almacen, Fecha, Articulo, Unidades) VALUES(@PAlmacen, @PFecha, @PArticulo, @PUnidades)");

También vale como lo has puesto tu, a mi me gusta más por parámetros para hacer mas legible el código:

string consultaSQL = "INSERT INTO InasistenciasJefatura (Legajo,Estado,Fecha,Cargo,Turno,Aviso) VALUES " + txtLeg.Text + ""+ txtEstado.Items + "" + txtFecha.Text +""+ Cargo.Items + ""+ txtTurno.Text  + "" + txtAviso.Text+ "" ;

string consultaSQL = "INSERT INTO InasistenciasJefatura (Legajo, Estado, Fecha, Cargo, Turno, Aviso) VALUES (@Legajo, @Estado, @Fecha, @Cargo, @Turno, @Aviso)";

Ahí tienes ejemplos de datos alfanuméricos, fecha y numérico.
Título: Re:Consultas sql en C#
Publicado por: Laxair en Sábado 10 de Diciembre de 2016, 18:12
Lo puse de la siguiente forma:

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 cmd;


            //string consultaSQL = "INSERT INTO InasistenciasJefatura (Legajo,Estado,Fecha,Cargo,Turno,Aviso) VALUES " + txtLeg.Text + ""+ txtEstado.Items + "" + txtFecha.Text +""+ Cargo.Items + ""+ txtTurno.Text  + "" + txtAviso.Text+ "" ;
            string consultaSQL = "INSERT INTO Inventario (Legajo, Estado, Fecha, Cargo, Turno, Aviso) VALUES(@Legajo, @Estado, @Fecha, @Cargo, @Turno, @Aviso)";
            cmd = new OleDbCommand(consultaSQL, conn);
            cmd.Connection = conn;
            cmd.Parameters.AddWithValue("@Legajo", txtLeg.Text);
            cmd.Parameters.AddWithValue("@Estado", txtEstado.Items);
            cmd.Parameters.AddWithValue("@Fecha", txtFecha.Text);
            cmd.Parameters.AddWithValue("@Cargo", Cargo.Items);
            cmd.Parameters.AddWithValue("@Aviso", txtAviso.Text);
            try
            {
                conn.Open();
            }
            catch (Exception excepcion)
            {
                Console.Write(excepcion.Message);
                Console.ReadLine();
            }

            if (conn.State == ConnectionState.Open)
            {
               
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception excepcion)
                {
                    Console.Write(excepcion.Message);
                    Console.ReadLine();
                }

                conn.Close();


            }

Y no funciona, si en la bd hay varias tablas hay que poner el nombre del archivo .Nombre_de_tabla_a_usar  o con solo poner el nombre de la tabla tendría que funcionar?
Título: Re:Consultas sql en C#
Publicado por: chenech en Sábado 10 de Diciembre de 2016, 18:22
Te puse un ejemplo, cambia la tabla y los campos por los de tu base de datos.
Inventario por InasistenciasJefatura y los campos de tu tabla y pasa los parámetros tuyos.
Título: Re:Consultas sql en C#
Publicado por: Laxair en Sábado 10 de Diciembre de 2016, 18:28
En el mensaje anterior te puse el código ya había cambiado todo.

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 cmd;


            //string consultaSQL = "INSERT INTO InasistenciasJefatura (Legajo,Estado,Fecha,Cargo,Turno,Aviso) VALUES " + txtLeg.Text + ""+ txtEstado.Items + "" + txtFecha.Text +""+ Cargo.Items + ""+ txtTurno.Text  + "" + txtAviso.Text+ "" ;
            string consultaSQL = "INSERT INTO InasistenciaJefatura (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", txtLeg.Text);
                    cmd.Parameters.AddWithValue("@Estado", txtEstado.Items);
                    cmd.Parameters.AddWithValue("@Fecha", txtFecha.Text);
                    cmd.Parameters.AddWithValue("@Cargo", Cargo.Items);
                    cmd.Parameters.AddWithValue("@Aviso", txtAviso.Text);
                    cmd.ExecuteNonQuery();
                }
                catch (Exception excepcion)
                {
                    Console.Write(excepcion.Message);
                    Console.ReadLine();
                }

                conn.Close();


            }
Título: Re:Consultas sql en C#
Publicado por: chenech en Sábado 10 de Diciembre de 2016, 20:12
Pon el código sin los bloques try catch para si te da error ver donde es.
Título: Re:Consultas sql en C#
Publicado por: Laxair en Sábado 10 de Diciembre de 2016, 20:16
Cuando apreto el botón ahora se cierra el formulario cosa que antes no pasaba pero sigue sin escribir en la bd.
Título: Re:Consultas sql en C#
Publicado por: chenech en Sábado 10 de Diciembre de 2016, 20:30
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.
Título: Re:Consultas sql en C#
Publicado por: Laxair en Sábado 10 de Diciembre de 2016, 21:21
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();


            }
        }
    }
}

Título: Re:Consultas sql en C#
Publicado por: Laxair en Sábado 10 de Diciembre de 2016, 23:06
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.
Título: Re:Consultas sql en C#
Publicado por: chenech en Domingo 11 de Diciembre de 2016, 15:12
Al tratar el dato como string debes poner el número tres entre comillas.
Título: Re:Consultas sql en C#
Publicado por: Laxair en Domingo 11 de Diciembre de 2016, 17:09
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.

Título: Re:Consultas sql en C#
Publicado por: chenech en Jueves 15 de Diciembre de 2016, 22:13
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.