Paulo Jardim Postado Setembro 26, 2011 Denunciar Share Postado Setembro 26, 2011 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 (editado) 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 } Editado Setembro 26, 2011 por Paulo Jardim Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Xistyle Postado Setembro 26, 2011 Denunciar Share Postado Setembro 26, 2011 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 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(); } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Xistyle Postado Setembro 26, 2011 Denunciar Share Postado Setembro 26, 2011 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 Entendi...valeu... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Xistyle Postado Setembro 26, 2011 Denunciar Share Postado Setembro 26, 2011 (editado) 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ão2) Abrir e fechar a conexão3) 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 bancoB) 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. Editado Setembro 26, 2011 por Xistyle Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 Vou tentarm, na verdade já vi que preciso mesmo dessa classe conforme você descreve aacima.. acho que com isso entenerei melhor como funciona....vou começar agora criando minha classe Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 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); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Xistyle Postado Setembro 26, 2011 Denunciar Share Postado Setembro 26, 2011 Tá faltando um parênteses no final de Integrated Security=True); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 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); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 é e não consigo aparece o metodo open no sqlconn...rs Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 (editado) 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? Editado Setembro 26, 2011 por Paulo Jardim Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Xistyle Postado Setembro 26, 2011 Denunciar Share Postado Setembro 26, 2011 (editado) 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). Editado Setembro 26, 2011 por Xistyle Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 porque ta dando erro aqui? cmd.Connection = sqlconn;diz que não existe nesse contexto. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Xistyle Postado Setembro 26, 2011 Denunciar Share Postado Setembro 26, 2011 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(); } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 Bom já entendi...Agora tenho de fazer esses dados retornar em um data table né?vou tentar Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 (editado) Sabe me dizer porque da erro nessa parte?static string mycon = "Data Source=SNSWS20\servidor;Initial Catalog=db_cadastro_aluno;Integrated Security=True";sequência de escape não reconheçida...ou algo desse tipo. Editado Setembro 26, 2011 por Paulo Jardim Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Xistyle Postado Setembro 26, 2011 Denunciar Share Postado Setembro 26, 2011 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";oustatic string mycon = "Data Source=SNSWS20\\servidor;Initial Catalog=db_cadastro_aluno;Integrated Security=True"; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Setembro 26, 2011 Autor Denunciar Share Postado Setembro 26, 2011 Perfeito XistyleOlha 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 :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Paulo Jardim
Gaelra...
o método abaixo é o que insere registros no banco...
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 para o comentário
Compartilhar em outros sites
20 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.