Fórum Storage Procedure C sharp com Firebird #591279

09/02/2018

0

Galera eu fiz uma Procedure no Banco de dados FIrebird ela executa e me traz um retorno, porém eu não estou conseguindo pegar o retorno no c# e grava em uma variavel ex Tenho minha tabela de usuários:

CREATE GENERATOR GEN_ID_USUARIOS;

CREATE TABLE TB_USUARIOS (
ID INTEGER NOT NULL,
EMPRESA INTEGER NOT NULL,
USUARIO VARCHAR(100) NOT NULL,
SENHA VARCHAR(10) NOT NULL,
TIPO CHAR(1) NOT NULL,
SETOR VARCHAR(1000) NOT NULL,
TESTE2 VARCHAR(100)
);

ALTER TABLE TB_USUARIOS ADD PRIMARY KEY (ID, EMPRESA);

Pra inserir nela tenho a Procedure que me retorna um output Processo= ''''''''''''''''''''''''''''''''UPDATE'''''''''''''''''''''''''''''''' ou Sucesso = ''''''''''''''''''''''''''''''''INSERT''''''''''''''''''''''''''''''''
SET TERM ^ ;

create or alter procedure PCD_CAD_USUARIOS (
EMPRESA integer not null,
USUARIO varchar(100) not null,
SENHA varchar(10) not null)
returns (
PROCESSO varchar(50))
as
begin

IF (EXISTS(SELECT usuario FROM tb_usuarios where (USUARIO = :USUARIO) AND (EMPRESA = :EMPRESA))) THEN
begin
UPDATE TB_USUARIOS SET
EMPRESA = :EMPRESA,
USUARIO = :USUARIO,
SENHA = :SENHA
WHERE (EMPRESA = :EMPRESA) AND
(USUARIO = :USUARIO);
PROCESSO = ''''''''''''''''''''''''''''''''UPDATE'''''''''''''''''''''''''''''''';
END
ELSE
begin

INSERT INTO TB_USUARIOS (ID, EMPRESA, USUARIO, SENHA, TIPO, SETOR)
VALUES (''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''', :EMPRESA, :USUARIO, :SENHA, ''''''''''''''''''''''''''''''''A'''''''''''''''''''''''''''''''', '''''''''''''''''''''''''''''''',1'''''''''''''''''''''''''''''''');
PROCESSO = ''''''''''''''''''''''''''''''''INSERT'''''''''''''''''''''''''''''''';
end
end

Na qual eu não estou conseguindo pegar no c# esse campo Processo pra fazer um if se for insert else se for update para informar ao usuario final:
Abaixo Código do c#.

fbSQL = "";

fbSQL = "execute procedure pcd_cad_usuarios(1, ''''''''''''''''''''''''''''''''TESTE'''''''''''''''''''''''''''''''', ''''''''''''''''''''''''''''''''123456'''''''''''''''''''''''''''''''')" ;
FbCommand comando = new FbCommand(fbSQL, Connection.fbcnn);
comando.CommandType = CommandType.StoredProcedure;
FbDataReader dr = comando.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);

teste = dt.Rows[0]["ID"].ToString();

e quando eu rodo o Programa apresenta o seguinte erro:
System.IndexOutOfRangeException: ''''''''''''''''''''''''''''''''Não há linha na posição 0.''''''''''''''''''''''''''''''''

Sendo que se eu executar somente um select ele funciona.
Obrigado.
Adriano Me

Adriano Me

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar