es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El formulario multiusuario en C# no se está guardando en la base de datos de SQL Server.

Estoy creando un programa para permitir que los usuarios de diferentes tipos inicien sesión utilizando las tres opciones de inicio de sesión realizadas en C#.

  • Tipo de usuario
  • Nombre de usuario
  • Contraseña

La cadena de conexión de la base de datos y la consulta están funcionando. He hecho el inicio de sesión y agregado datos sin la variable “USERTYPE” para verificar problemas de conexión. Sin embargo, estoy teniendo un problema con este fragmento de código:

“` c#
private void button1_Click(object sender, EventArgs e)
{
string usernamedt, passworddt;

<pre><code>usernamedt = username.Text;
passworddt = password.Text;

try
{
string query = "SELECT * FROM log_data WHERE username = '" + username.Text.Trim() + "' AND password = '" + password.Text.Trim() + "' ";

SqlDataAdapter sda = new SqlDataAdapter(query, sqlco);
DataTable dt = new DataTable();
sda.Fill(dt);

string usertype = user_type.SelectedItem.ToString();

if (dt.Rows.Count > 0)
{
// state rows in table
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i]["usertype"].ToString() == usertype)
{
MessageBox.Show("You are logged in as " + dt.Rows[i][2]);

if (user_type.SelectedIndex == 0)
{
customer customer1 = new customer();
customer1.Show();
this.Hide();
}
else if (user_type.SelectedIndex == 1)
{
Staff staff1 = new Staff();
staff1.Show();
this.Hide();
}
else if (user_type.SelectedIndex == 2)
{
Trainer trainer1 = new Trainer();
trainer1.Show();
this.Hide();
} // end nested if*/
} //end check for user type
}// end for loop
}// end row count
else
{
MessageBox.Show("The username or password is incorrect, Try Again", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} // end try block
catch
{
MessageBox.Show("Error ");
}
finally
{
sqlco.Close();
}
</code></pre>

} // end button LOG IN CLICK
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Descripción

    En el fragmento de código dado, el autor ha creado un programa que permite a diferentes tipos de usuarios acceder a través de tres opciones (Usertype, Username y Password) en C#. El autor ha escrito código para comprobar el Usertype del usuario que ha accedido y mostrar un formulario específico en función del Usertype seleccionado.

    Declaración del problema

    El autor está teniendo problemas con el fragmento de código, específicamente con la funcionalidad de acceso. La funcionalidad de acceso no está funcionando como se esperaba. El código no puede acceder a los usuarios, incluso con combinaciones de Username y Password correctas.

    Solución

    El fragmento de código dado está incompleto y no se puede determinar el problema exacto sin hacer pruebas. Sin embargo, en función del código, parece que el problema podría estar en la consulta SELECT. La consulta no utiliza la variable Usertype para filtrar los resultados y la condición if anidada para comprobar el Usertype no parece necesaria.

    Aquí hay algunas sugerencias que podrían solucionar el problema:

    • Agregar Usertype a la consulta SELECT y usarlo en la cláusula WHERE. Esto asegurará que se devuelvan solo los registros con el Usertype seleccionado.
    • Eliminar la condición if anidada y comprobar directamente el Usertype en la cláusula WHERE.
    • Agregar una instrucción de depuración para comprobar el resultado de la consulta y ver si se devuelven los registros esperados.

    Aquí hay un fragmento de código modificado que incorpora las sugerencias anteriores:

    private void button1_Click(object sender, EventArgs e)
    {
        string usernamedt, passworddt;
    
        usernamedt = username.Text;
        passworddt = password.Text;
    
        try
        {
            string usertype = user_type.SelectedItem.ToString();
            string query = $"SELECT * FROM log_data WHERE username='{usernamedt}' AND password='{passworddt}' AND usertype='{usertype}'";
            SqlDataAdapter sda = new SqlDataAdapter(query, sqlco);
            DataTable dt = new DataTable();
            sda.Fill(dt);
    
            if (dt.Rows.Count > 0)
            {
                MessageBox.Show($"Ha iniciado sesión como {dt.Rows[0][2]}");
    
                switch (user_type.SelectedIndex)
                {
                    case 0:
                        customer customer1 = new customer();
                        customer1.Show();
                        this.Hide();
                        break;
                    case 1:
                        Staff staff1 = new Staff();
                        staff1.Show();
                        this.Hide();
                        break;
                    case 2:
                        Trainer trainer1 = new Trainer();
                        trainer1.Show();
                        this.Hide();
                        break;
                }
            }
            else
            {
                MessageBox.Show("El nombre de usuario o la contraseña son incorrectos, Inténtelo de nuevo", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show($"Error: {ex.Message}");
        }
        finally
        {
            sqlco.Close();
        }
    }
    

    Con estos cambios, la función de acceso debería funcionar como se esperaba.

Comments are closed.