Array
(
)

Problemas com DbCommand e DbParameter

Rodrigo Gimenez
   - 29 jul 2011

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:
#Código

/// 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:
#Código
/// 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?

Rodrigo Gimenez
   - 01 ago 2011


Ninguém pode me da uma luz ae?

Hernane Goncalves
   - 01 ago 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.

Rodrigo Gimenez
   - 01 ago 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?

Hernane Goncalves
   - 03 ago 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.