Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Clauido José

Programação em 3 camadas

Recommended Posts

Boa tarde Galera

 

Bom e assim estou desenvolvementou uma aplicação em 3 camadas "Apresentação, Negocios e acesso a dados", bom no acesso a dados criei os metodos para banco de dados etc, quero que quando estiver na tela de cadastro por exemplo se o registro existir ele informe a tela de apresentação assim se o registro for gravado com sucesso.3

 

Aqui eu chamo o metodo na tela de apresentação:

        protected void btnGravar_Click(object sender, EventArgs e)
        {
            IntinerarioDB newRegistro = new IntinerarioDB();

            Intinerario intinerarioReg = new Intinerario(txtIntinerario.Text, txtMotorista.Text, txtHorario.Text);

            newRegistro.IncluirIntinerario(intinerarioReg, lblErros);

            lblErros.Text = "Intinerario cadastrado com sucesso";
        }

Aquii o metodo criado na camada de acessa dados.

        public void IncluirIntinerario(Intinerario intinerario,string lblError)
        {
            MySqlConnection CN = new MySqlConnection(Con);
            MySqlCommand Com = CN.CreateCommand();
            MySqlDataReader reader;

            string SQL = "SELECT * FROM tintinerario where intinerario = @intinerario";
            MySqlCommand cmd = new MySqlCommand(SQL, CN);
            cmd.Parameters.Add("@intinerario", MySqlDbType.VarChar).Value = intinerario;

            try
            {
                CN.Open();
                if (CN.State == ConnectionState.Open)
                {
                    reader = cmd.ExecuteReader();
                    if (reader.Read())
                    {
                        lblError = "Nome ja cadadastrada em nosso sistema !!";
                    }
                    else
                    {
                        try
                        {
                            Com.CommandText = "INSERT INTO tintinerario (intinerario,motorista,horarios) Values(?intinerario,?motorista,?horarios)";
                            Com.Parameters.AddWithValue("?intinerario", intinerario.intinerario);
                            Com.Parameters.AddWithValue("?motorista", intinerario.motorista);
                            Com.Parameters.AddWithValue("?horarios", intinerario.horarios);
                            try {
                                CN.Open();
                                int regitrosAfetados = Com.ExecuteNonQuery();
                                lblError = "Nome ja cadadastrada em nosso sistema !!";
                            } catch (MySqlException ex) {
                                throw new ApplicationException(ex.ToString());
                            } finally {
                                CN.Close();
                            }
                        }
                        catch (MySqlException ex)
                        {
                            throw new ApplicationException(ex.ToString());
                        }
                        finally
                        {
                            CN.Close();
                        }
                    }
                }
            }
        }

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem, mas você pode colocar o método "IncluirIntinerario" com um retorno boleano, para caso ocorra algo que não possa concluir, retorne false

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom vamos tentar ser mais claro nesse metodo que eu creie na camada acessadados ele busca se registro existe se existe ele gravar um novo registro se não ele não grava estou tentando colocar essa função como boleano mas não estou conseguindo sucesso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, colocar a função como boleano é simples, seria basicamente:

public bool IncluirIntinerario(Intinerario intinerario)
{
	bool retorno = true;
	
	//[...]

	try
	{
		CN.Open();
		if (CN.State == ConnectionState.Open)
		{
			reader = cmd.ExecuteReader();
			if (reader.Read())
			{
				retorno = false;
			}
			else
			{
				//[...]
			}	
		}		
		return retorno;
	}
}

Você poderia verificar o retorno do método:

if(IncluirIntinerario(...))
    label.Text = "Registro incluído com sucesso!";
else
    label.Text = "Houve um erro, ou o registro já existe no sistema";

Seria um dos modos de se fazer isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ptz cara vc me ajudou muito resolveu o que eu queria ficou legal só tem um problema quando o erro é do banco por exemplo ele não mostra para no visual studio na linha do throw new ApplicationException(ex.ToString()); como posso resolver isso.

 

Olha como ficou :

        public string IncluirIntinerario(Intinerario intinerario)
        {
            string SQL = "SELECT * FROM tintinerarios where intinerarios = @intinerario and horarios = @horarios";
            MySqlCommand cmd = new MySqlCommand(SQL, con);
            cmd.Parameters.Add("@intinerario", MySqlDbType.VarChar).Value = intinerario.intinerario;
            cmd.Parameters.Add("@horarios", MySqlDbType.VarChar).Value = intinerario.horarios;
            
            try
            {
                con.Open();
                if (con.State == ConnectionState.Open)
                {
                    reader = cmd.ExecuteReader();
                    if (reader.Read())
                    {
                        return "1";
                    }
                    else
                    {
                        reader.Close();
                        cmd.Dispose();
                        try
                        {
                            cmd.CommandText = "INSERT INTO tintinerarios (intinerarios,Motoristas,horarios) Values(?intinerarios,?Motoristas,?horarios)";
                            cmd.Parameters.AddWithValue("?intinerarios", intinerario.intinerario);
                            cmd.Parameters.AddWithValue("?Motoristas", intinerario.motorista);
                            cmd.Parameters.AddWithValue("?horarios", intinerario.horarios);
                            cmd.ExecuteReader();
                        } catch (MySqlException ex) {
                            throw new ApplicationException(ex.ToString());
                        } finally {
                            con.Close();
                        }                        
                    }
                }
                return "2";
            }
            catch (MySqlException ex)
            {
                throw new ApplicationException(ex.ToString());
            }
            finally
            {
                con.Close();
            }
        }

chamada do metodo:

        protected void btnGravar_Click(object sender, EventArgs e)
        {
            IntinerarioDB newRegistro = new IntinerarioDB();

            Intinerario intinerarioReg = new Intinerario(txtIntinerario.Text, txtMotorista.Text, txtHorario.Text);

            //newRegistro.IncluirIntinerario(intinerarioReg);
            string resultado = newRegistro.IncluirIntinerario(intinerarioReg);

            if (resultado  == "")
            {

            }
            else if (resultado == "1")
            {
                lblErros.Text = "Intinerario já cadastrado";
            }
            else if (resultado == "2")
            {
                lblErros.Text = "Intinerario cadastrado com sucesso";
            }

            txtIntinerario.Text = "";
            txtMotorista.Text = "";
            txtHorario.Text = "";
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara me ajuda não sei o que está acontecendo a pagina abre quando eu dou o submit ele da um erro na pagina.

 

 

 

The state information is invalid for this page and might be corrupted.Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: The state information is invalid for this page and might be corrupted.

Source Error:

[No relevant source lines]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como acho o erro real no c# no asp classico eu sabia ia no browser e desabilitava a mensagem de erro amigavel né asp.net não tem essa né?

 

 

Cara consegui resolver não sei como mas foi acho que era algum pau de caxe da maquina feito essa valeu mas queria saber e vejo o erro real quie esta dando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode exibir uma até uma tela (pode ser em js, usando uma window) com a mensagem na tela de apresentação se o registro existe ou se o registro for gravado com sucesso, passando valor na window para fechar após "n" segundos, ou deixar um botão mesmo. Fica mais interativo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.