Problemas com DbCommand e DbParameter
Salve galera.
To precisando de uma ajudinha, será que alguém pode dar uma força?Seguinte, estou fazendo uma Classe genéria de conexão onde pretendo trabalha com os bancos Oracle, SqlServer, Informix e MySql.
Estou usando DbConnection onde posso usa o DbProviderFactory para pegar que Provider estou usando e com isso usar DbCommand, DbDataReader, DbParameter e por ai vai, fica bem genérico e sem mudar nada funciona com a maioria dos bancos... Até o momento funciona que é uma blz, conecto em todos os bancos, faço select e por ai vai, mas ja me deparei com um problema.
Criei uma função para executar Querys no banco (Inserts, Updates, Deletes), nela eu passo o Sql, exemplo:
Se for assim vai blz, mas quero usar Parametros.Então criei uma função para adicionar parametros ao DbCommand dessa função ai, ai faço assim:
Se to conectado no oracle, funciona blz, mas se por exemplo estou conectado no MySql, vai da erro, por que ao invez de dois pontos (:) tenho que usa arroba(@) para nomear o parametro.Eu não queria ter isso fixo nas aplicações, queria passa sempre o SQL do mesmo jeito.
Eu poderia sempre usar dois pontos (:) por exemplo e dentro dessa função fBdSqlQuery verificar que banco estou e ser for diferente de Oracle trocar os dois pontos (:) por aquilo que funcionar no banco que to conectado (@, ?, #, sei la...), isso resolveria meu problema, mas a questão é, não tem nada nativo?
Quando uso OleDB (OleDBCommand), é só eu usar interrogação (?) no Sql que ele põem os parametros pela ordem, e funciona para todos os bancos, mas para DbCommand não funciona.
Alguém pode me da uma luz?
To precisando de uma ajudinha, será que alguém pode dar uma força?Seguinte, estou fazendo uma Classe genéria de conexão onde pretendo trabalha com os bancos Oracle, SqlServer, Informix e MySql.
Estou usando DbConnection onde posso usa o DbProviderFactory para pegar que Provider estou usando e com isso usar DbCommand, DbDataReader, DbParameter e por ai vai, fica bem genérico e sem mudar nada funciona com a maioria dos bancos... Até o momento funciona que é uma blz, conecto em todos os bancos, faço select e por ai vai, mas ja me deparei com um problema.
Criei uma função para executar Querys no banco (Inserts, Updates, Deletes), nela eu passo o Sql, exemplo:
/// Executa a query no banco.voDB.fBdSqlQuery("INSERT INTO TBDATA (dta1) VALUES ('2000-12-27')");
Se for assim vai blz, mas quero usar Parametros.Então criei uma função para adicionar parametros ao DbCommand dessa função ai, ai faço assim:
/// Adiciona parametros(Nome do parametro, tipo do parametro e valor).voDB.fAddParam(":dta1", DbType.Data, "12/12/2012"); /// Executa a query no banco.voDB.fBdSqlQuery("INSERT INTO TBDATA (dta1) VALUES (:dta1)");
Se to conectado no oracle, funciona blz, mas se por exemplo estou conectado no MySql, vai da erro, por que ao invez de dois pontos (:) tenho que usa arroba(@) para nomear o parametro.Eu não queria ter isso fixo nas aplicações, queria passa sempre o SQL do mesmo jeito.
Eu poderia sempre usar dois pontos (:) por exemplo e dentro dessa função fBdSqlQuery verificar que banco estou e ser for diferente de Oracle trocar os dois pontos (:) por aquilo que funcionar no banco que to conectado (@, ?, #, sei la...), isso resolveria meu problema, mas a questão é, não tem nada nativo?
Quando uso OleDB (OleDBCommand), é só eu usar interrogação (?) no Sql que ele põem os parametros pela ordem, e funciona para todos os bancos, mas para DbCommand não funciona.
Alguém pode me da uma luz?
Francisco Gimenez
Curtidas 0
Respostas
Francisco Gimenez
29/07/2011
Ninguém pode me da uma luz ae?
GOSTEI 0
Hernane Goncalves
29/07/2011
Cara ja tive muitos problemas com isso.
a solução que eu tenho pra voce é que passe a ultilizar ADO. entity Framework.
Lá voce faz qualquer conexão com qualquer banco, sem ter problema algum.
GOSTEI 0
Francisco Gimenez
29/07/2011
Mas ai não fico muito preso ao Framework?
Pois a empresa que trabalho, o sistema tem de ser muito flexível, muita coisa ta no banco, etc e tal.Há criação de telas dinâmicas que os itens da tela estão cadastrados no banco e por ai vai.
O que vc me diz?
Pois a empresa que trabalho, o sistema tem de ser muito flexível, muita coisa ta no banco, etc e tal.Há criação de telas dinâmicas que os itens da tela estão cadastrados no banco e por ai vai.
O que vc me diz?
GOSTEI 0
Hernane Goncalves
29/07/2011
Preso voce fica, pois seu servidor vai ter que estar atualizado com no minio o net framework 3.5
mas de qualquer forma vale apena, voce vai ver, vai facilitar sua vida.
GOSTEI 0