Paulo Jardim Posted September 26, 2011 Report Share Posted September 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? Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 26, 2011 (edited) 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 September 26, 2011 by Paulo Jardim Quote Link to comment Share on other sites More sharing options...
0 Xistyle Posted September 26, 2011 Report Share Posted September 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. Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 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. Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 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(); } } Quote Link to comment Share on other sites More sharing options...
0 Xistyle Posted September 26, 2011 Report Share Posted September 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. Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 26, 2011 Entendi...valeu... Quote Link to comment Share on other sites More sharing options...
0 Xistyle Posted September 26, 2011 Report Share Posted September 26, 2011 (edited) 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. Edited September 26, 2011 by Xistyle Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 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 Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 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); } Quote Link to comment Share on other sites More sharing options...
0 Xistyle Posted September 26, 2011 Report Share Posted September 26, 2011 Tá faltando um parênteses no final de Integrated Security=True); Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 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); Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 26, 2011 é e não consigo aparece o metodo open no sqlconn...rs Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 26, 2011 (edited) 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 September 26, 2011 by Paulo Jardim Quote Link to comment Share on other sites More sharing options...
0 Xistyle Posted September 26, 2011 Report Share Posted September 26, 2011 (edited) 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 September 26, 2011 by Xistyle Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 26, 2011 porque ta dando erro aqui? cmd.Connection = sqlconn;diz que não existe nesse contexto. Quote Link to comment Share on other sites More sharing options...
0 Xistyle Posted September 26, 2011 Report Share Posted September 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(); } } Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 26, 2011 Bom já entendi...Agora tenho de fazer esses dados retornar em um data table né?vou tentar Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 26, 2011 (edited) 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. Edited September 26, 2011 by Paulo Jardim Quote Link to comment Share on other sites More sharing options...
0 Xistyle Posted September 26, 2011 Report Share Posted September 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"; Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted September 26, 2011 Author Report Share Posted September 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 :) Quote Link to comment Share on other sites More sharing options...
Question
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 to comment
Share on other sites
20 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.