Ir para conteúdo

Arquivado

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

Diego Engel

contruindo métodos em classes C#

Recommended Posts

E aee galera !!

 

Estou desenvolvendo uma aplicação na qual precisarei através da chamada de um método armazenar os valores que este método buscará no banco no Dataset.

 

Segue o código de chamada do método.

DataSet ds = clsMenu.GetMenu(IdUsuario);

Abaixo segue o código do método:

public int GetMenu(IdUsuario)
		{

			string strConexao = "Server=xxxx;Port=xxxx;User Id=xxxx;Password=xxxxxx;Database=xxxx;";
			string strComando = " xxxx ";

			NpgsqlConnection pgConnection = new NpgsqlConnection(strConexao);
			NpgsqlCommand pgCommand = new NpgsqlCommand(strComando, pgConnection);
			NpgsqlDataReader pgDataReader;
			
			try
			{
				pgConnection.Open();
				pgDataReader = pgCommand.ExecuteReader();

				gvwTeste.DataSource = pgDataReader;
				gvwTeste.DataBind();
				pgConnection.Close();

				lblTeste.Text = gvwTeste.Rows.Count.ToString();

			}
			catch (Exception ex)
			{
				lblTeste.Text = ex.Message;
			}
		}
Agora.. algumas dúvidas..

 

1- Logo no começo do código (public int GetMenu(IdUsuario)), eu tenho um erro de "identifier Expected" ... o q q tah faltando ??

2- Como que o dataset que eu estou definido como "recebedor" do retorno do método vai de fato receber o resultado?? O fato de eu usar um DataReader no método não atrapalha??

3- Qual a sintaxe que devo utilizar na cláusula "WHERE" do meu select com o parâmetro que estou passando??

 

ps.: esse código do método acima foi utilizado para trazer para um gridview informações do banco em outra parte do sistema... como o que eu pretendo é qse a mesma coisa, mas para outro lugar ao invés do gridview.. acho q a alteração no código não será muita.

 

 

Desde já.. valeu ae pra quem puder ajudar !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

1)

Quando você criou o método:

public int GetMenu(IdUsuario)
Você disse que vai receber o IdUsuario por parâmetro, mas faltou dizer qual o tipo de dados dessa variavel, ficaria assim:

public int GetMenu(int IdUsuario)

2) seu método foi declarado como public int, quando deveria ser public DataSet, esse aqui é o tipo de dados que seu método vai retornar.

Se for trabalhar com os dados em DataSet, use Dataset, não use DataReader.

 

3) Aqui depende do seu modelo de banco de dados, cada um faz de uma maneira diferente, teria que ver como está o seu.

 

Outra coisa, seu método está jogando dados em uma gridview, não faça isso. Crie um método que retornar o dataset apenas, jogar o dataset dentro de uma grid não é trabalho desta sua classe.

 

Ps.: PostgreSQL!!! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o código com algumas alterações..

 


		public DataSet GetMenu(int IdUsuario)
		{

			string strConexao = "Server=xxxx;Port=xxxx;User Id=xxxx;Password=xxxx;Database=xxxx;";
			string strComando = "select * from sysadm.menutab;";

			NpgsqlConnection pgConnection = new NpgsqlConnection(strConexao);
			NpgsqlCommand pgCommand = new NpgsqlCommand(strComando, pgConnection);
			
			// o que eu colocaria aqui ??
			NpgsqlDataReader pgDataReader;
			
			try
			{
				pgConnection.Open();

				// o que eu colocaria aqui ??
				pgDataReader = pgCommand.ExecuteReader();

				pgConnection.Close();

			}

Dúvidas...

 

1 - OK

 

2- Como eu usar o DataSet ao invés do DataReader ?

 

3- Nesse caso gostaria apenas de saber como colocaria a variável na cláusula WHERE, em outro momento usei ' " + textbox.text " ' porém esse era um objeto do VS05... agora irei usar uma variável declarada na própria classe...

 

 

ps.: Estou usando PostgreSQL !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 - :D

 

2 - Estou chutando a sintaxe, acho que é algo assim:

NpgsqlDataAdapter da = new NpgsqlDataAdapter("SELECT * FROM ...", pgConnection);
DataSet ds = new DataSet();
da.Fill(ds);
Neste caso, jogamos o resultado do sql dentro do dataset ds.

 

3- Eu gosto de usar String.format para concatenar, fica mais fácil ler.

string.Format("SELECT * FROM tabela WHERE campo = {0}", IdUsuario)
Só uma correção, IdUsuario no seu caso é chamado de parâmetro, variavel declarada na propria classe seria as connections e commands que você criou :)

 

ps2.: Apenas fiz um comentário do PostgreSQL pois gosto bastante desse SGBD.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Estou compilando a página sem erros, e quando estou testando no IE a página, no momento que clico no botão que irá disparar o método que faz o select no banco e joga no dataset ocorre um erro...

 

segue o erro:

 

{"Fill: SelectCommand.Connection property has not been initialized."}

 

A linha que da o erro é : da.Fill(ds);

 

Segue o código:

 

string strConexao = "Server=xxx;Port=xxx;User Id=xxx;Password=xxx;Database=xxx;";
			string strComando = "select * from sysadm.menutab where id_menu = 1";
			
			NpgsqlConnection pgConnection = new NpgsqlConnection(strConexao);			
			NpgsqlCommand command = new NpgsqlCommand(strComando);
			NpgsqlDataAdapter da = new NpgsqlDataAdapter(strComando, strConexao);
			da.SelectCommand = command;			 
			DataSet ds = new DataSet();			

			da.Fill(ds);
			return (ds);

Compartilhar este post


Link para o post
Compartilhar em outros sites

no dataadapter você jogou um comando SQL certo?

o método Fill do dataadapter vai executar o sql e jogar o resultado dentro do dataset que você passou por parâmetro.

Faça um teste debugando, antes de exeutar o fill, a quantidade de linhas do dataset é 0, depois do fill, deve aumentar conforme o select.

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.