Выберите дублирующую строку из БД в зависимости от некоторых значений C# winforms - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь не повторять запись из поля Act_ID "Active" с пустым полем F_Return, но пока она не может ее решить. Как я могу сделать, чтобы эта запись уже находилась в БД, если она должна подтвердить, что актив уже назначен.

    //Query para validar datos repetidos
    string validarDatos = @"SELECT * FROM Prestamo WHERE Id_act=Id_act AND F_retorno IS NULL";

private void btnInsertar_Click(object sender, EventArgs e)
    {
        //Revisar si uno o mas campos estan vacios
        if (String.IsNullOrEmpty(txtId_emp.Text) || String.IsNullOrEmpty(txtId_act.Text)/* || String.IsNullOrEmpty(txtEstado.Text)*/)
        {
            MessageBox.Show("Uno o mas campos estan vacios.. Asegurese de ingresar todos los campos");
        }
        else
        {
            //Validar que el registro no este asignado
            OleDbCommand validarDataCommand;
            validarDataCommand = new OleDbCommand(validarDatos, OledbCon);
            validarDataCommand.Parameters.AddWithValue("@Id_act", OleDbType.VarChar).Value = txtId_act.Text;
            //validarDataCommand.Parameters.AddWithValue("@Id_emp", OleDbType.VarChar).Value = txtId_emp.Text;
            validarDataCommand.Parameters.AddWithValue("@F_retorno", OleDbType.VarChar);
            //Abrir conexion de BD
            AbrirCon();
            OleDbDataReader dr = validarDataCommand.ExecuteReader();
            while (dr.Read())
            {
                if (dr.HasRows == true)
                {
                    MessageBox.Show("Registro duplicado", "Access Denied");
                }

                else if (dr.HasRows == false)
                {

                    try
                    {
                        //Asignar el texto "Activo" a campo de Estado en el registro nuevo
                        string estado = "Activo";
                        txtEstado.Text = estado;
                        //Insertar registro en la BD
                        OleDbCommand insertDataCommand;
                        insertDataCommand = new OleDbCommand(insertDataBD, OledbCon);
                        insertDataCommand.Parameters.AddWithValue("Id_emp", OleDbType.VarChar).Value = txtId_emp.Text;
                        insertDataCommand.Parameters.AddWithValue("Id_act", OleDbType.VarChar).Value = txtId_act.Text;
                        insertDataCommand.Parameters.AddWithValue("F_entrega", DateTime.Now.ToString());
                        insertDataCommand.Parameters.AddWithValue("Estado", OleDbType.VarChar).Value = txtEstado.Text;
                        ////Abrir conexion de BD
                        AbrirCon();
                        int dataInserted = insertDataCommand.ExecuteNonQuery();

                        if (dataInserted > 0)
                        {
                            MessageBox.Show("El registro se a ingresado satisfactoriaente...");
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        //Borrar los datos de los textboxs
                        txtId_emp.Text = "";
                        txtId_act.Text = "";
                        txtEstado.Text = "";
                        //Cerrar la conexion de la BD
                        CerrarCon();
                    }
                } 
            }
        }
    }

После проверки того, что актив не дублируется, следующий шаг y для вставки данные в БД.

...