Erro ao buscar generator
20/04/2018
0
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();
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
Posts
20/04/2018
Leandro Chiodini
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?
20/04/2018
William Dutra
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.
20/04/2018
Leandro Chiodini
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.
20/04/2018
William Dutra
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.
20/04/2018
Leandro Chiodini
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.
20/04/2018
William Dutra
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?
20/04/2018
William Dutra
// 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();
20/04/2018
Leandro Chiodini
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.
20/04/2018
William Dutra
sim, ele passa e para nessa linha
FbDataReader reader = comandoSQL.ExecuteReader();
20/04/2018
William Dutra
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:
20/04/2018
William Dutra
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
Clique aqui para fazer login e interagir na Comunidade :)