Erro ao buscar generator

20/04/2018

0

Ola pessoa, estou fazendo um CRUD para iniciar no C#, mas estou encontrando algumas dificuldades com o generator do firebird.

Explicando o projeto:

Uma aplicação com CRUD, para cadastrar produtos, clientes, usuários, (OBS: Achei o processo mais completo para abranger os conhecimentos básicos), a ideia é que no codigo do produto ele busque a informação de um generator do banco, com autoincrement funciona, mas gostaria de aprender com o generator também.

Problema:

Ao chegar no comando
FbDataReader reader = comandoSQL.ExecuteReader();
ele da pau e não anda o negocio.

OBS Gerais:

Consigo conectar no banco e Inserir informações (informando o codigo manual ou autoincrement).

Código:

            string genID;

            ConexaoFirebird.Conectar();

            FbCommand comandoSQL = new FbCommand("select gen_ID(cd_ref,1) from produtos)", ConexaoFirebird.conexao);
            //comandoSQL.CommandText = CommandType.Text;

            FbDataReader reader = comandoSQL.ExecuteReader();

            //comandoSQL.Parameters.Add(new FbParameter("@cd_ref", 1));

            while(reader.Read())
            {
                string valor_gen_id = reader[0].ToString();
                MessageBox.Show("Valor é: " + valor_gen_id);
            }
            //comandoSQL.ExecuteNonQuery();
            ConexaoFirebird.Desconectar();


O que estou errando?
William Dutra

William Dutra

Responder

Posts

20/04/2018

Leandro Chiodini

Bom dia amigo.
Você pode ver o que esta vindo no retorno no teu comando SQL?
e também colocar o erro que ocorre ao tentar executar no banco?
Responder

20/04/2018

William Dutra

Bom dia amigo.
Você pode ver o que esta vindo no retorno no teu comando SQL?
e também colocar o erro que ocorre ao tentar executar no banco?


Ola Chiodini, obrigado por dar um retorno.

Ao depurar o código, ele me retorna o seguinte aviso:

Ocorreu uma exceção sem tratamento do tipo "FirebirdSql.Data.FirebirdClient.FbException" em FirebirdSql.Data.FirebirdClient.dll

Informações adicionais: Dynamic SQL Error


e também tem outro aviso

Gravidade	Código	Descrição	Projeto	Arquivo	Linha	Estado de supressão
Aviso		Found conflicts between different versions of the same dependent assembly that could not be resolved.  These reference conflicts are listed in the build log when log verbosity is set to detailed.	Sistema			


o valor que retorna do banco, não consigo ver.
Responder

20/04/2018

Leandro Chiodini

Fala Willian agora ficou mais claro.
Não é um erro no teu código isso.
e sim nas referencias do teu projeto,

Veja, você não esta usando dois projetos ao mesmo tempo ?
O que ocorre é que uma das referencias de um dos projetos pode ser de uma versão maior que a outra.
como ao compilar provavelmente o tua IDE esta baixando as referencias para pasta bin. isso da um conflito pois pode se ter duas referencias iguais de versões diferentes.

Faça um teste.
na tua ide se for visual studio .
clica na solution, vai em Build -> Clean Solution
isto deve resolver...

caso nao resolva podes tentar.
vai no menu da solução novamente
acessar Gerenciador de Nugts(Manage nuget packages) e clicar com consolidar

depois é só compilar e testar.

Responder

20/04/2018

William Dutra

fiz o que me passou, mas o erro continua. Agora vi que tem uma parte que não copiei rsrs me acostumando com a IDE.

An unhandled exception of type 'FirebirdSql.Data.FirebirdClient.FbException' occurred in FirebirdSql.Data.FirebirdClient.dll

Additional information: Dynamic SQL Error

SQL error code = -104

Token unknown - line 1, column 38

)


No Gerenciador Nuget, no consolidar não tinha nada, mas em update tinha, incluindo uma do firebird net provider. Atualizei mas não mudou nada.
Responder

20/04/2018

Leandro Chiodini

Opa agora sim,
Cara esse erro é um erro de validação do teu usario no banco de dados.
consegues me passar o codigo da tua classe toda.
pra ver ?
se possivel a da conexaofirebird tb
da uma olhada no usuario que tais passando e tenta conectar direto no banco com o usuario e senha que tais passando no arquivo de configuração.
Responder

20/04/2018

William Dutra

sim, essa é a classe de conexão

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FirebirdSql.Data.FirebirdClient;

namespace Sistema
{
    public static class ConexaoFirebird
    {
        static FbConnection _conexaoFB;

        public static FbConnection conexao
        {
            get
            {
                return _conexaoFB;
            }
        }

        public static bool Conectar()
        {
            string strConexao;

            strConexao = "User = SYSDBA;" +
                        "Password=masterkey;" +
                        "Database=C:\\\\Pessoal\\\\Projetos\\\\C#\\\\Sistema\\\\BANCO.FDB;" +
                        "Port=3050;" +
                        "Dialect=3;" +
                        "Role=;" +
                        "Connection timeout=7;" +
                        "Connection lifetime=0;" +
                        "Pooling=true;" +
                        "Pacjet Size=8192;" +
                        "Server Type=0;";

            _conexaoFB = new FbConnection(strConexao);
            _conexaoFB.Open();
            return true;
        }

        public static bool Desconectar()
        {
            _conexaoFB.Close();
            _conexaoFB = null;
            return false;
        }
    }
}



Mas se fosse a senha, não daria problema ao inserir no banco?
Responder

20/04/2018

William Dutra

e não to com uma classe para gravar, coloquei direto no evento do botão gravar.


// string genID;

            ConexaoFirebird.Conectar();

            FbCommand comandoSQL = new FbCommand("select gen_ID(cd_ref,1) from produtos)", ConexaoFirebird.conexao);
            //comandoSQL.CommandText = CommandType.Text;

            FbDataReader reader = comandoSQL.ExecuteReader();

            MessageBox.Show(" " + reader);

            //comandoSQL.Parameters.Add(new FbParameter("@cd_ref", 1));

            while(reader.Read())
            {
                string valor_gen_id = reader[0].ToString();
                MessageBox.Show("Valor é: " + valor_gen_id);
            }
            //comandoSQL.ExecuteNonQuery();
            ConexaoFirebird.Desconectar();

Responder

20/04/2018

Leandro Chiodini

Eu to com uma duvida soh nessa tua String da DataBase
acho que cada dois \\\\ anula um, dai bastaria colocar somente \\\\
"Database=C:\\\\Pessoal\\\\Projetos\\\\C#\\\\Sistema\\\\BANCO.FDB;"

podes tentar dar uma testada
se tais usando localmente
na string de conexao bassa o datasource que tu usa local
e na database passa somente o nome da tua base


outra coisa coloca pra depurar o codigo e ve se ele passar da linha conectar.
Responder

20/04/2018

William Dutra

é esse "\\\\\\\\" ai veio qnd eu colei aqui no forum, dentro do código ele ta com duas barras só.

sim, ele passa e para nessa linha

FbDataReader reader = comandoSQL.ExecuteReader();
Responder

20/04/2018

William Dutra

mexendo no erro ali, tinha uma opção de copiar informações detalhadas

FirebirdSql.Data.FirebirdClient.FbException não foi manipulada
  ErrorCode=335544569
  HResult=-2147467259
  Message=Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 38
)
  SQLSTATE=42000
  Source=FirebirdSql.Data.FirebirdClient
  StackTrace:
       em FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteReader(CommandBehavior behavior) na C:\\Users\\Jiri\\Documents\\devel\\NETProvider\\working\\Provider\\src\\FirebirdSql.Data.FirebirdClient\\FirebirdClient\\FbCommand.cs:linha 533
       em FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteReader() na C:\\Users\\Jiri\\Documents\\devel\\NETProvider\\working\\Provider\\src\\FirebirdSql.Data.FirebirdClient\\FirebirdClient\\FbCommand.cs:linha 517
       em Sistema.Form1.btn_adicionar_Click(Object sender, EventArgs e) na C:\\Pessoal\\Projetos\\C#\\Sistema\\SistemaSimples\\Sistema\\Sistema\\Form1.cs:linha 135
       em System.Windows.Forms.Control.OnClick(EventArgs e)
       em System.Windows.Forms.Button.OnClick(EventArgs e)
       em System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       em System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       em System.Windows.Forms.Control.WndProc(Message& m)
       em System.Windows.Forms.ButtonBase.WndProc(Message& m)
       em System.Windows.Forms.Button.WndProc(Message& m)
       em System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       em System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       em System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       em System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       em System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       em System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       em System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       em System.Windows.Forms.Application.Run(Form mainForm)
       em Sistema.Program.Main() na C:\\Pessoal\\Projetos\\C#\\Sistema\\SistemaSimples\\Sistema\\Sistema\\Program.cs:linha 19
       em System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       em System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       em Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       em System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       em System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       em System.Threading.ThreadHelper.ThreadStart()
  InnerException: 
       ErrorCode=335544569
       HResult=-2146233088
       IsWarning=false
       Message=Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 38
)
       SQLSTATE=42000
       Source=FirebirdSql.Data.FirebirdClient
       StackTrace:
            em FirebirdSql.Data.Client.Managed.Version10.GdsDatabase.ProcessResponse(IResponse response) na C:\\Users\\Jiri\\Documents\\devel\\NETProvider\\working\\Provider\\src\\FirebirdSql.Data.FirebirdClient\\Client\\Managed\\Version10\\GdsDatabase.cs:linha 656
            em FirebirdSql.Data.Client.Managed.Version10.GdsDatabase.ReadResponse() na C:\\Users\\Jiri\\Documents\\devel\\NETProvider\\working\\Provider\\src\\FirebirdSql.Data.FirebirdClient\\Client\\Managed\\Version10\\GdsDatabase.cs:linha 688
            em FirebirdSql.Data.Client.Managed.Version10.GdsDatabase.ReadGenericResponse() na C:\\Users\\Jiri\\Documents\\devel\\NETProvider\\working\\Provider\\src\\FirebirdSql.Data.FirebirdClient\\Client\\Managed\\Version10\\GdsDatabase.cs:linha 696
            em FirebirdSql.Data.Client.Managed.Version11.GdsStatement.Prepare(String commandText) na C:\\Users\\Jiri\\Documents\\devel\\NETProvider\\working\\Provider\\src\\FirebirdSql.Data.FirebirdClient\\Client\\Managed\\Version11\\GdsStatement.cs:linha 84
            em FirebirdSql.Data.FirebirdClient.FbCommand.Prepare(Boolean returnsSet) na C:\\Users\\Jiri\\Documents\\devel\\NETProvider\\working\\Provider\\src\\FirebirdSql.Data.FirebirdClient\\FirebirdClient\\FbCommand.cs:linha 1169
            em FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteCommand(CommandBehavior behavior, Boolean returnsSet) na C:\\Users\\Jiri\\Documents\\devel\\NETProvider\\working\\Provider\\src\\FirebirdSql.Data.FirebirdClient\\FirebirdClient\\FbCommand.cs:linha 1190
            em FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteReader(CommandBehavior behavior) na C:\\Users\\Jiri\\Documents\\devel\\NETProvider\\working\\Provider\\src\\FirebirdSql.Data.FirebirdClient\\FirebirdClient\\FbCommand.cs:linha 527
       InnerException: 


Responder

20/04/2018

William Dutra

eu executei esse comando sql

 select gen_ID(cd_ref,1) from produtos 


direto no IBX para ver o retorno

 
GEN_ID
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15



que é a quantidade de produtos que tenho cadastrados, se eu ficar executando ele fica aumentando os numero e o generator, ai mudei o parametro ali para 0

 select gen_ID(cd_ref,0) from produtos  


e parou de incrementar o generator, porem o erro é o mesmo ao depurar
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar