[firebase-br] Conexão com firebird e C#?

Marcelo Guilherme Tamanini marcelo_tamanini em hotmail.com
Sex Fev 13 09:34:33 -03 2009


Bom dia,
Felipe.

Blz e vc?

Então, eu consegui executar a procedure, faltou colocar apenas o "EXECUTE PROCEDURE", ficando:
FbCommand fcmUsuario = new FbCommand("EXECUTE PROCEDURE STP_AUTENTICAUSUARIO(?,?)", fcnUsuario);

E ontem mesmo fiz dessas duas formas que você me falou. E deu certo as duas maneiras, o único problema é quando não recebo nenhum valor pelo executeScalar(), ou seja, null, acaba gerando erro, então acabei optando pela 1ª forma.
Mas não teria um maneira de fazer com que minha procedure me retorne algum valor, como "0", caso não consiga me retornar nenhum registro?
Minha procedure está da seguinte maneira:
begin
  SELECT CodUsuario
  FROM TB_Usuario
  WHERE Usuario = :usuario AND Senha = :senha
  INTO :codusuario;
  suspend;
end

E para que não gere erro em C# ao consultar, verifico o meu parâmetro de saída se recebeu algum valor:
   int resultado=0;
   fcmUsuario.ExecuteNonQuery();
   if (Convert.IsDBNull(fcmUsuario.Parameters[2].Value) == false)
   {   
      resultado = (int) fcmUsuario.Parameters[2].Value;
   }

   if (resultado <= 0)
   {
      throw new Exception("Usuário ou senha inválido! Tente novamente!");
   }


> Date: Fri, 13 Feb 2009 09:16:16 -0200
> From: fboriani em gmail.com
> To: lista em firebase.com.br
> Subject: Re: [firebase-br] Conexão com firebird e C#?
> 
> Fala Marcelo... blza
> 
> 
> Então cara, se vc está com um parametro de OutPut em sua Store Procedure,
> existem duas formas para vc conseguir recuperar este valor, o primeiro dele
> (no qual eu acho a forma mais correta) é vc configurar a saida do parametro,
> executar e recuperar... veja abaixo:
> 
> ----------------------------------------------------
> 
> //depois de configurar os parametros de input, você deve configurar o
> parametro de saida (output) que sua Store Procedure irá retornar...
> fcmUsuario.Parameters.Add("@CodUsuario", FbDbType.Integer).Direction =
> ParameterDirection.Output;
> 
> //tendo em mente que vc ja está com a conexão aberta e com todos os
> parametros setados, vc deve executar o comando
> fcmUsuario.ExecuteNonQuery();
> 
> //recuperar o valor do parametro de saida (output)
> int saida =
> int.Parse(fcmUsuario.Parameters["@CodUsuario"].Value.ToString());
> 
> ----------------------------------------------------
> 
> A outra forma (fazendo um ExecuteScalar() no seu comando) é você fazer uma
> "Select..." em sua Store Procedure, por exemplo:
> 
> ----------------------------------------------------
> 
> //configurar o comando da seguinte forma:
> FbCommand fcmUsuario = new FbCommand("SELECT STP_AUTENTICAUSUARIO.CodUsuario
> FROM STP_AUTENTICAUSUARIO(?,?)", fcnUsuario);
> 
> //executar com o ExecuteScalar()
> int saida = int.Parse(fcmUsuario.ExecuteScalar().ToString());
> 
> ----------------------------------------------------
> 
> Assim você consegue recuperar o resultado a Store Procedure...
> 
> Lembrando que o método ExecuteScalar() de um objeto "Command", sempre irá
> retornar um "object" sendo ele  o resultado da primeira coluna, da primeira
> linha... blza
> 
> 
> obs: teste a select da segunda opção, pois estou sem o FB aqui para lhe dar
> certeza... mas este é o caminho
> 
> Espero que ajude
> []'s

_________________________________________________________________
Discover the new Windows Vista
http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE


Mais detalhes sobre a lista de discussão lista