MÉTODO USANDO REFERENCIA

SAMUCATNB 16/12/2014 17:19:03
#443246
Olá amigos, estou precisando de ajuda para usar um método utilizando referencia a um OleDbDataReader, caso eu esteja errado por favor me corrijam porque começei utilizar agora C#, abaixo parte do código que da o erro:
OleDbDataReader dr;
ProcuraProduto(ref dr); //erro ocorre nesta linha (Use of unassigned local variable [ô]dr[ô])
.....
//método criado
public void ProcuraProduto( ref OleDbDataReader drProd)

a ideia é fazer uma pesquisa no método e retornar o resultado.
KERPLUNK 16/12/2014 18:31:59
#443250
Aqui no fórum tem um tópico fixo sobre isso, coloquei vários exemplos lá.
SAMUCATNB 17/12/2014 01:21:45
#443255
Kerplunk , vc poderia mandar o link para que eu pudesse ver sua postagem?
OCELOT 17/12/2014 10:47:32
#443264
Resposta escolhida
Sinceramente se você quer simplesmente fazer isso
public void ProcuraProduto( ref OleDbDataReader drProd)

Então deveria fazer isso
public OleDbDataReader ProcuraProduto()

Não tem porque usar referencia se precisa retornar apenas um valor, pra isso existe o retorno do método.

Quando a passar por referencia, existem duas formas no C#, uma que você passa uma variável já inicializada que pode ter o seu valor modificado pelo método, que no caso é a que você tentou usar, com o keyword ref, e a outra é a que você pode passar uma variável ainda não inicializada que vai receber um valor do método, que é usando o keyword out
public void ProcuraProduto(out OleDbDataReader drProd)

Neste caso funcionaria para você, seria só trocar o ref por out também na chamada da função, porém ainda digo que se a função só retorna um valor então use o valor de retorno dela e não o out
SAMUCATNB 17/12/2014 15:43:12
#443273
boa tarde Ocelot, o que você disse perfeito, mas agora quando executo as linhas abaixo após passar pela segunda linha ocorre o erro segue abaixo:
dr = ProcuraProduto();
dr.Read(); // erro - tentativa invalida de chamar Read quando o leitor estava fechado
OCELOT 17/12/2014 15:49:58
#443274
Ai o problema já é dentro do ProcuraProduto, como o erro não foi um NullReferenceException então ele está retornando o datareader, porém este está sendo retornada já fechado.
SAMUCATNB 18/12/2014 14:51:52
#443291
estou enviando o método caso possa me ajudar de alguma forma.

[txt-color=#0000f0] public OleDbDataReader ProcuraProduto()
{
using (OleDbConnection conexaoAccess = clsAccess.getInstancia().getConexao())
{

try
{
conexaoAccess.Open();

OleDbCommand cmd = new OleDbCommand([Ô]Select probar, prodes, proven, proest from Produto where probar = [ô][Ô] + txtprobar.Text + [Ô][ô][Ô], conexaoAccess);
OleDbDataReader dr = cmd.ExecuteReader();
return dr;
}
catch (OleDbException oledbex)
{
MessageBox.Show([Ô]Erro de acesso aos dados [Ô] + oledbex.Message, [Ô]Erro[Ô]);
OleDbCommand cmd = new OleDbCommand([Ô]Select probar, prodes, proven, proest from Produto where probar = [ô]xxxxxxxxxxxx[ô][Ô], conexaoAccess);
OleDbDataReader dr = cmd.ExecuteReader();
return dr;
}
finally
{
//fecha a conexao
conexaoAccess.Close();
}
}
}
[/txt-color]
Tópico encerrado , respostas não são mais permitidas