none
Problemas pra dar um select no banco (C#)...Sou realmente iniciante, preciso de ajuda... RRS feed

  • Pergunta

  • Boa tarde,

    Estou tendo um problema pra dar select em um programa em C#, aqui está a rotina:


            public string RetornaDados()
            {
                ConsultorioTableAdapter RetDados = new ConsultorioTableAdapter();
                string Nome = txtNome.Text;
                RetDados.BuscarNome(Nome);
                return RetornaDados();

            }

            private void btnBuscar_Click(object sender, EventArgs e)
            {
                RetornaDados();
            }


    Ele me gera essa exceção: StackOverflowException


    Poderiam me ajudar?

    Eu quero que ele faça a busca do nome e preencha os campos do formulário com o resultado.Caso não encontre o resultado ele dará a mensagem de que o nome não foi encontrado (isso eu irei adicionar mais pra frente, antes preciso que ele ao menos mostre os dados que existam na base).


    Obrigado
    terça-feira, 30 de dezembro de 2008 20:53

Todas as Respostas

  •  Cesar_Silvestre wrote:
    Boa tarde,
            public string RetornaDados()
            {
                ConsultorioTableAdapter RetDados = new ConsultorioTableAdapter();
                string Nome = txtNome.Text;
                RetDados.BuscarNome(Nome);
                return RetornaDados();

            }

     

    Note que no retorno do método há uma chamada para o próprio método. Em outras palavras, o método está recursivamente invocando a ele mesmo, daí, eventualmente, o StackOverflow.

     

    O que você quer provavelmente é isto:

     

            public string RetornaDados()
            {
                ConsultorioTableAdapter RetDados = new ConsultorioTableAdapter();
                string Nome = txtNome.Text;

                string ret = RetDados.BuscarNome(Nome);
                return  ret;

           }

     

    terça-feira, 30 de dezembro de 2008 21:08
  • Dae Cesar tranquilo?

     

    Você poderia postar o Código da classe ConsultorioTableAdapter?

     

    Em qual linha que esta ocorrendo o erro??

     

    Abraços!

    terça-feira, 30 de dezembro de 2008 21:09
  •  Pimpão wrote:

    Dae Cesar tranquilo?

     

    Você poderia postar o Código da classe ConsultorioTableAdapter?

     

    Em qual linha que esta ocorrendo o erro??

     

    Abraços!



    opa, eu fiz usando aquele wizard com o dataset prar criar o vínculo com o meu banco de dados.Será que poderia me dar uma dica de como criar uma classe com as instâncias de abertura de conexão? Assim eu criaria meus própiros métodos de qualquer forma, eu sempre tenho dificuldades de aplicar um select na base e fazê-la retornar num formulário, desde que comecei a aprender a programar (fiz no vb6, qdo comecei há 6 meses rsrsrsrs).


     Angus MacGyver wrote:

     Cesar_Silvestre wrote:
    Boa tarde,
            public string RetornaDados()
            {
                ConsultorioTableAdapter RetDados = new ConsultorioTableAdapter();
                string Nome = txtNome.Text;
                RetDados.BuscarNome(Nome);
                return RetornaDados();

            }

     

    Note que no retorno do método há uma chamada para o próprio método. Em outras palavras, o método está recursivamente invocando a ele mesmo, daí, eventualmente, o StackOverflow.

     

    O que você quer provavelmente é isto:

     

            public string RetornaDados()
            {
                ConsultorioTableAdapter RetDados = new ConsultorioTableAdapter();
                string Nome = txtNome.Text;

                string ret = RetDados.BuscarNome(Nome);
                return  ret;

           }

     



    E aí Angus, seguinte, quando eu fiz desta forma ele diz q não pode implicitar int pra converter em to string no RetDados.BuscarNome(Nome);

    Na linha:

    string ret = RetDados.BuscarNome(Nome);



    Agradeço a ajuda de vocês.
    terça-feira, 30 de dezembro de 2008 22:08
  •  Cesar_Silvestre wrote:


    E aí Angus, seguinte, quando eu fiz desta forma ele diz q não pode implicitar int pra converter em to string no RetDados.BuscarNome(Nome);

    Na linha:

    string ret = RetDados.BuscarNome(Nome);



    Agradeço a ajuda de vocês.

     

    O método BuscarNome() retorna uma int e o método RetornaDados() retorna uma string; são incompaíveis. Ou você faz o método RetornaDados() retornar uma int ou você converte o retorno de BuscarNome() para string. O primeiro caso seria assim:

     

          public int rnaDados()
            {
                ConsultorioTableAdapter RetDados = new ConsultorioTableAdapter();
                string Nome = txtNome.Text;

                int = RetDados.BuscarNome(Nome);
                return  ret;

           }

     

    O segundo, assim:

     

            public string RetornaDados()
            {
                ConsultorioTableAdapter RetDados = new ConsultorioTableAdapter();
                string Nome = txtNome.Text;

                string ret = Convert.ToString(RetDados.BuscarNome(Nome));
                return  ret;

           }


     

     

     

    quarta-feira, 31 de dezembro de 2008 00:15
  • Olá Cesar.. Vou postar aqui uma classe que uso para fazer a conexão com o banco de dados (Abertura da Conexão e o fechamento da mesma)

     

    Primeiramente você deve criar uma classe em Solution Explorer > >No seu projeto clique com o direito e vai em Add>>Class  (No meu caso criei com o nome de ClsDados), no meu exemplo estou usando ODBC, mas você pode adaptar para qualquer outro tipo de conexão apenas alterando o Objeto e a string de conexão..

     

    Veja como você pode fazer

     

    Code Snippet

    class ClsBanco

    {

    //Classe responsavel pela abertura da conexÆo com o banco de dados!

    public OdbcConnection AbreConexao()  //Este metodo retornar um objeto OdbConnection com a Conexão aberta

    {

    try

    {

    // Crio primeiramente a string de conexão

    string StrConn = "Dsn=ABSGESTOR;Uid=DBA;Pwd=SQL";

    // Crio o objeto OdbcConnection e passo a string de conexão

    OdbcConnection Conexao = new OdbcConnection(StrConn);

    // Abro a conexão, caso a tentativa de abertura com o banco não ocorra   o código ira capturar o erro na clausula catch

    Conexao.Open();

    // Retorna a conexão aberta

    return Conexao;

    }

    catch (Exception ex) //A mensagem de erro vai ficar na variavel ex

    {

    throw ex;

    }

    }

     

    //Classe responsavel por fechar a conexÆo

    //O metodo FechaConexao recebe por paramentro a conexão aberta para depois fechar

    public void FechaConexao(OdbcConnection Conexao)

    {

         //Testa se a conexão esta aberta e caso esteja a mesma é fechada

    if (Conexao.State == ConnectionState.Open)

    {

    Conexao.Close();

    }

    }

    }

     

     

    Nó código acima criei somente para abrir a conexão e fechar, poderia tambem implementar para por exemplo retornar um DataSet ou um DataReader..

     

    Agora para você poder usar os metodos de abertura e fechamento da conexão basta você chamar a classe em um form por exemplo..

     

    Veja:

     

    Code Snippet

    public partial class FrmConfBanco : Form

    {

    public FrmConfBanco()

    {

    InitializeComponent();

    }

    private void BtnTestaConexao_Click(object sender, EventArgs e)

    {

    try

    {

    ClsBanco Banco = new ClsBanco(); //Instancia da classe ClsBanco

    OdbcConnection Conexao = new OdbcConnection(); //objeto OdbConnection para receber a conexaõ

    Conexao = Banco.AbreConexao(); //Conexao recebe a a conexão aberta com o banco de dados

    MessageBox.Show("Conexao Aberta!");

    }

    catch (Exception ex) //Caso ocorra falha o Exception ex ira armazenar a mensagem de erro

    {

    MessageBox.Show("Erro ao Abrir a Conexão!"+ex.message);

    }

    finally

    {

    //Para fechar a conexão passo por paramentro o objeto Conexao

    Banco.FechaConexao(Conexao);

    }

    }

    }

     

     

    Acho que deu para explicar como criar a classe de abertura e fechamento da conexão..

     

    Veja tambem que você depois de abrir a conexão com o banco de dados dentro do form você poderia usar o objeto Conexao para por exemplo executar um OdbcCommand para possiveis inclusões, exclusões ou alteração dos dados no banco..

     

    Abraços

     

    quarta-feira, 31 de dezembro de 2008 00:28