Erro ao buscar generator
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 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:
O que estou errando?
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
Curtidas 0
Respostas
Leandro Chiodini
20/04/2018
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?
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?
GOSTEI 0
William Dutra
20/04/2018
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?
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.
GOSTEI 0
Leandro Chiodini
20/04/2018
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.
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.
GOSTEI 0
William Dutra
20/04/2018
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.
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.
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.
GOSTEI 0
Leandro Chiodini
20/04/2018
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.
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.
GOSTEI 0
William Dutra
20/04/2018
sim, essa é a classe de conexão
Mas se fosse a senha, não daria problema ao inserir no banco?
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?
GOSTEI 0
William Dutra
20/04/2018
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();
GOSTEI 0
Leandro Chiodini
20/04/2018
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.
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.
GOSTEI 0
William Dutra
20/04/2018
é 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
sim, ele passa e para nessa linha
FbDataReader reader = comandoSQL.ExecuteReader();
GOSTEI 0
William Dutra
20/04/2018
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:
GOSTEI 0
William Dutra
20/04/2018
eu executei esse comando sql
direto no IBX para ver o retorno
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
e parou de incrementar o generator, porem o erro é o mesmo ao depurar
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
GOSTEI 0