Jump to content
Fórum Script Brasil
  • 0

Select Simples Sql server


Paulo Jardim

Question

Gaelra...

o método abaixo é o que insere registros no banco...

public void InsereRegistro()
        {
            try
            {
                string sSQL = "";

                sSQL = "INSERT INTO Aluno (Nome, Telefone)" + " VALUES ('" + tbNome.Text + "', '" + tbTelefone.Text  + "') ";

                clsConexao ObjConexao = new clsConexao();
                ObjConexao.ExecuteCommand("conn", sSQL);

Porém, como faço pra selecionar os registros do banco, de forma que no load da página ele já coloque o último cadastrado nos campos, depois se eu clicar em anterior ele retorna para o registro anterior, e o contrario com o próximo registro?

Link to comment
Share on other sites

20 answers to this question

Recommended Posts

  • 0

Galera....

Sendo que há uma classe de conecção que tem um método para retornar os valores... só que como achei isso na internet ainda não sei utilizar....Poderiam me ajudar?

#region Definicao de Metodos
            public void ExecuteCommand(string myConnectionName, string myQueryString)
        {
            // Metodo responsavel por executar uma instrução SQL
            // Recebe como parametro o nome de uma chave do arquivo web.config que contem string de conexão e
            // a instrução SQL a ser executada pode ser um SELECT ou uma procedure (preferencialmente)
            // Utililizo Tray..Catch para tratamento de erro
            try
            {
                // Definir valores padrões das variaveis
                _ErrorMessage   = "";
                _State          = false;

                // Se não for passado nenhuma chave de conexão do arquivo web.config
                // vou setar uma chave padrão de conexão do arquivo Web.Config
                if (myConnectionName.Length == 0)
                { // Aqui estou indicando o nome da chave que contem a string de conexão no arquivo web.config
                    myConnectionName = "conn"; 
                }  
                
                string myConnectionString = ConfigurationManager.ConnectionStrings[myConnectionName].ConnectionString.ToString();

                // Se não for informado comando T-SQL retorno error
                if (myQueryString.Length > 0) // Se realmente foi passado um comando a ser executado
                {   
                    // Inicio uma conexão com o banco de dados
                    SqlConnection myConnection = new SqlConnection(myConnectionString);
                    // Abro a conexão
                    myConnection.Open(); 

                    // Inicio um comando
                    SqlCommand myCommand = new SqlCommand(myQueryString, myConnection);

                    // Executo um comando com ExecuteReader, pois este retorna dados a um SqlDataReader
                    _rsData = myCommand.ExecuteReader(); // Executo do comando
                    _State  = true;                      // Indico o status da operação 
                    _CompleteCommand = true;
                }
            }
            catch (Exception ex)
            {
                // Em caso de erro seto as variaveis abaixo
                _ErrorMessage = ex.Message.ToString();
                _State = false;
                _ErrorNumber = ex.GetHashCode();
            }
        }
            public SqlDataReader RecordSet
        {
            // Metodo para ler os registros
            get { return _rsData; }
        }
            public int ErrorNumber
        {
            // Metodo para ler ultimo código de error
            get { return _ErrorNumber; }
        }
            public string ErrorDescription
        {
            // Metodo para ler ultima descrição de error
            get { return _ErrorMessage; }
        }
            public bool ConnectionState
        {
            // Metodo para ler ultimo status da conexao
            get { return _State; }
        }
            public bool CompleteCommand
        {
            // Metodo para ler status do ultimo comando executado.
            get { return _CompleteCommand; }
        }
        #endregion
    }

Edited by Paulo Jardim
Link to comment
Share on other sites

  • 0

Paulo, nesse formato de "navegar" entre os registros, você vai ter que carregar todos os registros em um DataTable no Load.

Depois, carregue os dados nos TextBox baseados no seu DataTable.Rows.Count (ou seja, último registro).

Nos eventos dos botões de navegação (próximo/anterior) você precisa apenas verificar se é o último ou primeiro registros e, caso não seja, carregar aquela linha do seu DataTable.

Essa é uma forma simples de fazer para tabelas com poucos registros. Em outros casos, impactaria em problemas de desempenho, visto que o DataTable com todos os registros ficaria armazenado na memória, esperando para ser usado.

Link to comment
Share on other sites

  • 0

Valeu Xistyle, mas eu posso reaproveitar a minha classe de conexão de que forma?

Esse metodo abaixo serve pra me retornar um datatable?

public SqlDataReader RecordSet
        {
            // Metodo para ler os registros
            get { return _rsData; }
        }

Se não como faria isso?

me desculpe mais sou ignorante ainda nessa linguagem.

Link to comment
Share on other sites

  • 0

Quero dizer...

eu gotaria de saber como colocar esse código aqui e onde...se é na minha classe de conxão ou onde é,...

Tem sim. Quando o usuário abrir a tela que você deseja já ter todos os dados carregados, coloque uma chamada de uma rotina que preencha todos os campos no Form Load:
CODE
private void Form_Load(object sender, System.EventArgs e)
{
    CarregaDados()
}

private void CarregaDados()
{
    SqlDataAdapter _da = new SqlDataAdapter();
    DataSet  _dataSet = new DataSet();

    SqlConnection _conexao = new SqlConnection(SUASTRINGCONEXAO);
    SqlCommand  _command = new SqlCommand(conexao);
  
    _command.CommandText = "SELECT nome, idade, profissao FROM pessoa";
    _conexao.Open()

    _da.Fill(_dataSet, "Retorno");
    DataTable _dados = _dataSet.Tables["Retorno"];
    
    foreach (DataRow _linha in _dados.Rows)
   {
        txtNome.Text = _linha["nome"].ToString();
        txtIdade.Text = _linha["idade"].ToString();
        txtProfissao.Text = _linha["profissao"].ToString();
    }
}

Link to comment
Share on other sites

  • 0

Paulo, o _rsData parece conter todos os dados que você leu durante a pesquisa. Particularmente não costumo trabalhar como DataReader, mas fica a seu gosto.

Esse código que te passei anteriormente você usará na sua tela de dados e não na classe de dados. Ou seja, quando for carregar a tela (Load), carrega os dados chamando sua classe de conexão.

Agora sugestão cara... classe de conexão com o tempo fica um negócio meio automático de fazer, de acordo com sua necessidade. É interessante você montar sua própria classe pois algumas vezes as classes de tutoriais vêm com mais coisas que o necessário.

Link to comment
Share on other sites

  • 0

Vou deixar você quebrar a cabeça um pouco, mas basicamente, o que você vai precisar numa classe de conexão:

1) Montar a conexão

2) Abrir e fechar a conexão

3) Rotina para executar comandos não selecionáveis (INSERT/UPDATE/DELETE)

4) Rotina para executar comando selecionável (SELECT)

O resto vai depender da sua necessidade. Toda vez que as rotinas 3 e 4 forem chamadas, as rotinas 2 devem ser executadas. No método construtor da sua classe de conexão, a montagem da conexão pode ser efetuada (ConnectionString). Se quiser, pode montar uma propriedade para passar dinamicamente a string de conexão para seu objeto de conexão.

De outra forma, quando desejar executar um UPDATE, por exemplo, os passos lógicos serão:

a) Ao instanciar o objeto da sua classe de conexão, o objeto de conexão interno da classe já montará a string de conexão com o banco

B) Quando você solicitar a execução do UPDATE no seu Form, seu método da classe de conexão deverá abrir a conexão (através de um método, segundo enumerado acima - 2), executar o UPDATE e, mesmo que ocorra um erro, fechar a conexão com o banco.

Edited by Xistyle
Link to comment
Share on other sites

  • 0

num sai do lugar ainda...só lendo na net mais muita informação diferente...

tava tentando fazer só isso mais já ta dando erro...

public class dados
    {
        string mycon = ("Data Source=SNSWS20\servidor;Initial Catalog=db_cadastro_aluno;Integrated Security=True";

        SqlConnection sqlconn = new SqlConnection(mycon);

    }

Link to comment
Share on other sites

  • 0

Sim, mas mesmo sem ele tava dando erro...ai fui ver o error ele disse que era pra num era statico...

Ai botei Static deu certo...mais não entendi porque...

static string mycon = "Data Source=SNSWS20\servidor;Initial Catalog=db_cadastro_aluno;Integrated Security=True";

        SqlConnection sqlconn = new SqlConnection(mycon);

Link to comment
Share on other sites

  • 0

Consegui conctar e disconectar...ve se é assim:

public class dados
    {

        string mycon = "Data Source=SNSWS20\servidor;Initial Catalog=db_cadastro_aluno;Integrated Security=True";

        private void conecta()
        {

        SqlConnection sqlconn = new SqlConnection(mycon);
        
        sqlconn.Open();


        }

        private void disconecta()
        {
            SqlConnection sqldisc = new SqlConnection(mycon);

            sqldisc.Close();
            sqldisc.Dispose();

        }


    }

Agora vou tentar:

3) Rotina para executar comandos não selecionáveis (INSERT/UPDATE/DELETE)

4) Rotina para executar comando selecionável (SELECT)

Poderiam me ajudar com esses 2 últmos?

Edited by Paulo Jardim
Link to comment
Share on other sites

  • 0

Legal Paulo! Só não precisa instanciar novamente a conexão para desconectá-la. Aí você cria o objeto conexão como variável no escopo da classe, e não do método. Ficaria assim:

public class dados
    {

        string mycon = "Data Source=SNSWS20\servidor;Initial Catalog=db_cadastro_aluno;Integrated Security=True";
        SqlConnection sqlconn = new SqlConnection(mycon);

        private void conecta()
        {
        
             sqlconn.Open();

        }

        private void disconecta()
        {

            sqlconn.Close();
            sqlconn.Dispose();

        }


    }
É necessário isso pois você iria trabalhar com dois objetos diferentes: um que teve a conexão aberta com o Open e outro que não teve conexão aberta. Quando você desse o Close, geraria uma exceção. Tendo seu objeto de conexão pronto, vou dar a idéia do INSERT/UPDATE/DELETE e deixar o Select contigo.
//O método precisa ser público, ao contrário dos de conexão, que serão acessados somente pela classe.
public void ExecutaAcao(string sSQL)
{
    SqlCommand cmd = New SqlCommand();
    
    try
    {
        cmd.Connection = sqlconn;
        conecta();

        cmd.CommandText = sSQL;
        cmd.ExecuteNonQuery();
    }
    catch (Exception exc)
    {
        //Como você está trabalhando com camadas (apresentação e dados nesse caso) não é viável você abrir um MessageBox por aqui. Portanto, o throw envia a mensagem abaixo para o método que chamou este método ExecutaAcao, que está no seu Form. Assim, você consegue separar bem as bibliotecas que suas classes irão usar (nesse caso, para colocar um MessageBox nessa classe de conexão, você teria que importar uma biblioteca específica para abrir os MessageBoxes).
        throw new Exception("Ocorreu o seguinte erro ao executar uma ação no banco: \n" + exc);
    } 
    finally
   { 
        disconecta()
   } 
}

Lembrando que para o SELECT, você terá um método que retorna um objeto com seus dados (pode ser um DataTable).

Edited by Xistyle
Link to comment
Share on other sites

  • 0
public class dados
    {

       //Construtor
       dados()
       { 
            string mycon = "Data Source=SNSWS20\servidor;Initial Catalog=db_cadastro_aluno;Integrated Security=True";
            SqlConnection sqlconn = new SqlConnection(mycon);
        }

        private void conecta()
        {
        
             sqlconn.Open();

        }

        private void disconecta()
        {

            sqlconn.Close();
            sqlconn.Dispose();

        }


    }

Link to comment
Share on other sites

  • 0

O C# reconhece algumas palavras chaves como própria, para uso do compilador. Entre elas, existem algumas como \n, \t.

Toda vez que for usar uma string que contenha essa barra (\), ou use-a duplicada ou coloque uma @ no início da string:

static string mycon = @"Data Source=SNSWS20\servidor;Initial Catalog=db_cadastro_aluno;Integrated Security=True";

ou

static string mycon = "Data Source=SNSWS20\\servidor;Initial Catalog=db_cadastro_aluno;Integrated Security=True";

Link to comment
Share on other sites

  • 0

Perfeito Xistyle

Olha só :)

private void DeletaRegistro()
        {
            try
            {
                string sSql = "";

                sSql = "DELETE FROM Aluno WHERE Nome = '" + tbNome.Text + "' ";
                dados dado = new dados();
                dado.ExecutaAcao(sSql);

            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }

Rs agora já enteni como funciona... :)

acho que estou pegando o ojeito

muito obrigado mesmo....

Agora preciso de sua ajuda pro select :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...