Estoy creando una aplicación básica para agregar y mostrar información del cliente usando formularios de Windows en Visual Studio. Lo configuré para poder mostrar el contenido de la base de datos en una vista de cuadrícula y también agregarlo a la base de datos, que puede ver el código a continuación. en lo que estoy atascado en este momento es actualizar la información de los clientes. Quiero buscar en la base de datos por ID de cliente que será ingresado por el usuario en un cuadro de texto, y mostrar los detalles específicos de los clientes en sus cuadros de texto relevantes que luego puedo editar y guardar.

using (SQLiteCommand cmd = conn.CreateCommand())
{
    // adds customers details to the database
    cmd.CommandText = @"INSERT INTO customer (title, " + "firstname, " + "lastname, " + "dob, " + "nicode, " + "email, " + "password, " + "allowance) VALUES (@setTitle, @setFirstname, @setLastname, @setDOB, @setNICode, @setEmail, @setPassword, @setAllowance)";
    cmd.Parameters.AddWithValue("setTitle", cb_title.Text);
    cmd.Parameters.AddWithValue("setFirstname", txtFirst_Name.Text);
    cmd.Parameters.AddWithValue("setLastname", txtSurname.Text);
    cmd.Parameters.AddWithValue("setDOB", dtp_DOB.Text);
    cmd.Parameters.AddWithValue("setNICode", txtNI_Code.Text);
    cmd.Parameters.AddWithValue("setEmail", txtEmail.Text);
    cmd.Parameters.AddWithValue("setPassword", txtPassword.Text);
    cmd.Parameters.AddWithValue("setAllowance", txtAllowance.Text);

    int recordsChanged = cmd.ExecuteNonQuery();
    MessageBox.Show("Customer Added");
    conn.Close();

    Customers customers = new Customers();
    customers.Show();
    this.Hide();
}

Eso es lo que tengo para agregar un nuevo cliente que funciona bien

using (SQLiteCommand cmd = conn.CreateCommand())
{
    // adds customers details to the database
    cmd.CommandText = @"UPDATE customer SET (title, " + "firstname, " + "lastname, " + "dob, " + "nicode, " + "email, " + "password, " + "allowance) VALUES (@setTitle, @setFirstname, @setLastname, @setDOB, @setNICode, @setEmail, @setPassword, @setAllowance)  WHERE custid = @recd";

    cmd.Parameters.AddWithValue("title", cb_title_update.Text);
    cmd.Parameters.AddWithValue("firstname", txtFirst_Name_update.Text);
    cmd.Parameters.AddWithValue("lastname", txtSurname_update.Text);
    cmd.Parameters.AddWithValue("dob", dtp_DOB_update.Text);
    cmd.Parameters.AddWithValue("nicode", txtNI_Code_update.Text);
    cmd.Parameters.AddWithValue("email", txtEmail_update.Text);
    cmd.Parameters.AddWithValue("password", txtPassword_update.Text);
    cmd.Parameters.AddWithValue("allowance", txtAllowance_update.Text);
    cmd.Parameters.AddWithValue("recd", Convert.ToInt32(txtSearch.Text));

    int recordsChanged = cmd.ExecuteNonQuery();

    MessageBox.Show("Customer Updated");
    conn.Close();

    Customers customers = new Customers();
    customers.Show();
    this.Hide();
}

Y ese es el código que tengo hasta ahora para actualizar la base de datos, pero no puedo averiguar cómo recuperar los datos del cliente y mostrarlos en los cuadros de texto, se agradecería cualquier ayuda u orientación.

-1
Adrian Rowlands 20 feb. 2021 a las 19:32

2 respuestas

La mejor respuesta

Su declaración de actualización no es correcta. Intente lo siguiente.

    cmd.CommandText =@"UPDATE customer 
                    SET title = @setTitle,
                    firstname = @setFirstname, 
                    lastname = @setLastname 
                    dob = @setDOB, 
                    nicode = @setNICode, 
                    email = @setEmail,
                    password = @setPassword, 
                    allowance = @setAllowance 
                    WHERE custid = @recd";

Es un poco diferente de un inserto. Cada campo se establece en un nuevo valor. No necesitas toda esa concatenación. Esta es una cadena literal.

Por supuesto, en una aplicación real, NUNCA almacenarías las contraseñas como texto sin formato.

1
Mary 20 feb. 2021 a las 18:33

Para obtener el valor de una determinada columna de una determinada fila, puede intentar llamar al método SqlCommand.ExecuteReader.

Supongamos que desea obtener la contraseña del cliente.

string connectionstring = @"connectin string";

private void btnSearch_Click(object sender, EventArgs e)
{
    using (SqlConnection conn = new SqlConnection(connectionstring))
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "Select * from customer where customerID = @cusID";
        cmd.Parameters.AddWithValue("@cusID", textBoxID.Text);

        conn.Open();
        try
        {
            SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
            if (reader.HasRows)
            {
                if (reader.Read())
                {
                    //  get password column value
                    textBoxPWD.Text = reader["password"].ToString();
                }
            }
            else
            {
                Console.WriteLine("no such record");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("\nError:\n{0}", ex.Message);
        }
    }
}

En cuanto a actualizar el registro,

private void btnUpdate_Click(object sender, EventArgs e)
{
    using (SqlConnection conn = new SqlConnection(connectionstring))
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "UPDATE customer SET password = @cusPWD WHERE customerID = @cusID";
        cmd.Parameters.AddWithValue("@cusID", textBoxID.Text);
        cmd.Parameters.AddWithValue("@cusPWD", textBoxPWD.Text);
        conn.Open();

        cmd.ExecuteNonQuery();
    }
}
1
Kyle Wang 22 feb. 2021 a las 02:39