daianyyy 0 Report post Posted February 22, 2010 Olá pessoal ...tive que fazer minha aplicação conectar em dois bancos , no sql server e no mysql ...conectou tudo bonitinho, só que na hora de inserir no mysql dá um erro no parametro @variavel ...acredito que por causa do simbolo @ , o que não acontece no sql server ...como faço pra resolver esse problema , não quero criar sqls diferentes para os bancos ....tem com resolver isso ??? Share this post Link to post Share on other sites
Dee 0 Report post Posted February 22, 2010 Que erro dá ? Posta aí. Share this post Link to post Share on other sites
Motta 645 Report post Posted February 22, 2010 Como isto funciona em dois bancos ? A mesma aplicação pode rodar em dois bancos diferentes (o usuário escolhe) ou roda sempre em dois bancos (algo como uma base remota) ? Os mesmos SQL´s são executados para os dois (ou mais) bancos ? Share this post Link to post Share on other sites
daianyyy 0 Report post Posted February 23, 2010 Motta...tipo o usuario que escolhe ...dependendo da string de conexão que estiver habilitada meu sistema conecta ou no sql server ou no mysql . Até ai tah tudo ok ..as sql que eu tenho funcionam perfeitamente no sql server ....mas no mysql dá erro na hora de passar paramento que está usando o simbolo @variavelx....dá erro pelo tipo de simbolo que no sqlserver é @ e no mysql deve ser outro tipo de simbolo ....gostaria de saber c não tem um simbolo que fuincione para os dois .... Share this post Link to post Share on other sites
Kandrade 7 Report post Posted February 23, 2010 Posta o código. A sql não deveria mudar. Essa é uma query simples ou uma chamada de Stored Procedure? Share this post Link to post Share on other sites
Motta 645 Report post Posted February 23, 2010 Em geral os Sistemas multi-banco tem uma camada que fala com o BD, esta camada "traduz" o SQL básico da aplicação para o SQL padrão do BD destino (functions nativas,formato de datas etc). Share this post Link to post Share on other sites
quintelab 91 Report post Posted February 23, 2010 Este @ com certeza é um parâmetro do .net e não do banco. E o MySql deve utilizar outro como por exemplo o ? sinal de interrogação. Abraços... Share this post Link to post Share on other sites
daianyyy 0 Report post Posted February 24, 2010 entaum meu sql esta assim : public const string INSERT_BLOCO = " INSERT INTO " + " BLOCO " + " (NOME ) " + "VALUES " + " (@NOME) "; Motta tem como você me explicar essa camada que traduz o sql ??? Share this post Link to post Share on other sites
Dee 0 Report post Posted February 24, 2010 Esta SQL que você fez funciona no SQL, mas não no MySQL ? Share this post Link to post Share on other sites
daianyyy 0 Report post Posted February 24, 2010 Isso mesmo ...me retorna um erro indicando o @ como errado na sql ....sendo que no sql server funciona perfeitamente !!!! Share this post Link to post Share on other sites
Dee 0 Report post Posted February 24, 2010 Entendi Outra pergunta, esse código que você postou você executa por onde ? Share this post Link to post Share on other sites
Kandrade 7 Report post Posted February 24, 2010 Comente a linha que faz o insert no banco e imprima a variavel abaixo em algum lugar, pode ser na tela. INSERT_BLOCO O que seria isso @NOME? De onde vem? Share this post Link to post Share on other sites
daianyyy 0 Report post Posted February 24, 2010 Olá pessoal esse é meu código ...esperam que entendam ....rs public Funcionarios Find(string codigo) { DbParameter par = GenericDB.criaParameter("@CODIGO", DbType.Int16, codigo);//passa paramentro para a sql try { //Executando a transação passando a conexão,o tipo do comando, o T-SQL e os parametros criados acima DataTable dt = DbHelper.ExecuteDataset(ConnectionDB.ConnectionString, CommandType.Text, Statements.SELECT_FUNC_WHERE, par).Tables[0]; //Criando o objeto da classe model para retorno do método Funcionarios funcionario=new Funcionarios(); funcionario.Codigo=Convert.ToInt16(dt.Rows[0]["CODIGO"]); funcionario.Cpf=dt.Rows[0]["CPF"].ToString(); funcionario.Nome=dt.Rows[0]["NOME"].ToString(); funcionario.Telefone=dt.Rows[0]["TELEFONE"].ToString(); funcionario.Email=dt.Rows[0]["EMAIL"].ToString(); funcionario.Endereco=dt.Rows[0]["ENDERECO"].ToString(); funcionario.Cidade=dt.Rows[0]["CIDADE"].ToString(); funcionario.Cep=dt.Rows[0]["CEP"].ToString(); funcionario.Estado=dt.Rows[0]["ESTADO"].ToString(); funcionario.Categoria=dt.Rows[0]["CATEGORIA"].ToString(); return funcionario; } catch (Exception ex) { return null; } } Essa é a sql que o código executa .... public const string SELECT_FUNC_WHERE = "SELECT " + " CODIGO, CPF, NOME, TELEFONE, EMAIL, ENDERECO, CIDADE, CEP, ESTADO, CATEGORIA , EPC " + "FROM " + " FUNCIONARIOS " + "WHERE " + " CODIGO = @CODIGO"; Com o @ funciona no Sql Server .....e com o ? funciona no Mysql public const string SELECT_FUNC_WHERE = "SELECT " + " CODIGO, CPF, NOME, TELEFONE, EMAIL, ENDERECO, CIDADE, CEP, ESTADO, CATEGORIA , EPC " + "FROM " + " FUNCIONARIOS " + "WHERE " + " CODIGO = ?"; Mas eu queria uma maneira que funcionasse nos dois ...senaum terei que fazer dois arquivos de consultas sql diferentes ..e eu tenho muitas consultas ...acho que seria inviável ....c tiver um jeito me ajudem ....espero ter explicado melhor agora .... Share this post Link to post Share on other sites
Kandrade 7 Report post Posted February 24, 2010 Eu não manjo realmente quase nada de .NET mas porque usar @ ou ? é da linguagem isso? Porque não usar a variavel diretamente? public const string SELECT_FUNC_WHERE = "SELECT " + " CODIGO, CPF, NOME, TELEFONE, EMAIL, ENDERECO, CIDADE, CEP, ESTADO, CATEGORIA , EPC " + "FROM " + " FUNCIONARIOS " + "WHERE " + " CODIGO = " + funcionario.getCodigo(); Estou supondo que o objeto funcionario existe e está preenchido corretamente e que exista um método chamado getCodigo que retorna o conteúdo de Codigo. Share this post Link to post Share on other sites
daianyyy 0 Report post Posted February 24, 2010 estou usando códigos em camadas entaum o sql está separado do código ...por isso preciso passar parametros para o sql ....se for mudar essa maneira de programar terei que mecher em todo o meu sistema !!!! Share this post Link to post Share on other sites
Dee 0 Report post Posted February 24, 2010 Tem como você imprimir na tela o que está retornando esta String ? Share this post Link to post Share on other sites
daianyyy 0 Report post Posted February 24, 2010 Não ..essa string é o comando sql que é executado pelo executedataset.... Share this post Link to post Share on other sites
Kandrade 7 Report post Posted February 24, 2010 Aqui explica como fazer: http://social.msdn.microsoft.com/Forums/pt-BR/adoptpt/thread/2cdd5858-3a45-4689-a042-512144b2ca8f Abraço! Share this post Link to post Share on other sites
quintelab 91 Report post Posted February 24, 2010 Movido Modelagem / SQL http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET Como eu disse isso é do .net e não sintaxe sql, em tempo de execução ele substitui os @ por valores informados pelo desenvolvedor. Abraços... Share this post Link to post Share on other sites
daianyyy 0 Report post Posted February 25, 2010 Eu sei como faz pra um e para outro ...só que eu queria saber c naum tem um jeito pra fazer igual nos dois ...senaum terei que criar duas sql de cada ....... Share this post Link to post Share on other sites