Como escrever um aplicativo .NET que funciona tanto com SqlServer e Oracle (agora que System.Data.OracleClient é obsoleto)

StackOverflow https://stackoverflow.com/questions/1193066

Pergunta

System.Data.OracleClient namespace descontinuado?

(Em primeiro lugar não entre em pânico ainda, System.Data.OracleClient não está sendo removido pela Microsoft ainda, no entanto, não está na versão cliente do .net 4)

Este para ser possível usando System.Data.OracleClient, No entanto a Microsoft decidiu deprecate OracleClient . (OracleClient é o provedor ADO.NET para o Oracle desenvolvido pela Microsoft e navios como uma parte do .NET Framework.)

Você pode usar ODP.Net, no entanto que você deseja que seus clientes do SQL Server ter que instalar ODP.Net? (Você deseja qualquer um dos seus clientes ter que instalar software Oracle?)

DataDirect não é uma opção, uma vez que custa um braço e uma perna ; ele pode apenas sobre ser acessível se você precisa conectar um único servidor para um mainframe. No entanto, não é uma opção para esperar que todos os clientes para comprá-lo.

Movendo formulário C # para Java não é uma boa opção, como eu sou um programador C # e desejo de ser capaz de ganhar a vida!

Como a maioria dos ISVs que têm de suportar múltiplos RDBMS que só precisa de uma solução que nos permite usar o pequeno subconjunto de Oracle que é o mesmo que SqlServer. Portanto System.Data.OracleClient era poderoso o suficiente para nós.

(Talvez devêssemos começar a armazenar todos os dados em arquivos simples, então pare de DBA que o cliente está tentando nos dizer como software de gravação. DBAs Oracle são o pior!)


A minha pergunta real é como eu posso escrever software .NET que fala com Oracle que é de US dor livre para instalado como software .NET que fala com SqlServer. Ter que usar ODP.NET só faz o cliente Oracle instalar ainda mais doloroso, com ainda mais para dar errado.

Se eu estava usando JAVA eu poderia apenas usar JDBC tipo 4 pilotos. A Microsoft fornece um para SqlServer e Oracle fornece um para Oracle. No entanto, parece que a Oracle pretende fazer uso do .Net tão duro quanto possível e Microsoft pretende fazer uso do Oracle tão duro quanto possível.


Até agora, o melhor opção parece com de Devart dotConnect .

No entanto, estou começando a questionar tempo NET é um sistema de desenvolvimento bom para ISV, quanto mais cedo ou mais tarde, você sempre terá um cliente que exige o suporte da Oracle. No mundo Java, eles parecem ter este problema resolvido.


Parece que a Oracle pode estar prestes a trazer para fora um senible themselfs provedor ADO.NET totalmente gerenciado pode até ser fácil de instalar! consulte aqui que as alegações beta - 2011, Produção -. Final de 2011

Foi útil?

Solução

EDIT: O ODP.NET totalmente gerenciado está agora disponível em produção. É muito pequeno (menos de 10 MB) e não é dependente de outros arquivos. Você pode obtê-lo aqui:

http://www.oracle.com/technetwork/topics /dotnet/downloads/index.html

resposta Original:

Uma forma de facilmente garantir que o software do lado do cliente exigido Oracle (incluindo ODP.NET) está sempre disponível na máquina implantação é incorporá-lo com o seu aplicativo. ODP.NET tem obtido um muito mais fácil para incorporar agora que XCOPY ODP.NET está disponível. Você pode baixá-lo a partir deste link:

http://www.oracle.com/technology /software/tech/windows/odpnet/index.html

Com XCOPY ODP.NET, tudo que você precisa fazer quando você implantar seu aplicativo é o seguinte:

1) Copie seu aplicativo para a máquina de destino

2) Run "install.bat" que copia um casal da Oracle DLL para a máquina de destino (incluindo ODP.NET e do lado do cliente Oracle (OCI) software)

3) Executar "configure.bat", que faz um "gacutil" e atualiza o registro da máquina de destino

4) Fornecer sua aplicação com informações da cadeia de conexão. Você pode usar a seqüência de conexão EZConnect ( "hostname @ servicename") ou você (ou seu cliente) pode compartilhar preexistente configurações SQLNET, definindo a entrada de registro TNS_ADMIN ou variável de ambiente para apontar para uma outra casa Oracle que tem aliases de conexão SQLNET já configurados.

É isso aí! É realmente muito simples.

Eu espero que você dê uma boa olhada ODP.NET XCOPY no link acima para ver por si mesmo como é fácil estes dias para incorporar ODP.NET com seu aplicativo.


Notas adicionais:

Se você não optar por incorporar ODP.NET com sua aplicação, tanto no caso da Microsoft OracleClient e no caso do ODP.NET, é preciso haver lateral adicional cliente Oracle software (OCI) instalado em qualquer máquina de implantação. A única diferença entre os dois casos é que, quando você estiver usando ODP.NET, ele também precisa existir na máquina de implantação. A boa notícia é que um a Oracle típico instalar em sua máquina cliente irá incluir ODP.NET já.

Agora, se a sua máquina de destino já ODP.NET instalado, você não precisa fazer mais nada. Você só precisa distribuir seu aplicativo. Se você precisa instalar ODP.NET usando o instalador padrão, você também pode baixá-lo a partir do link fornecido acima. O ODP.NET instalação padrão leva apenas alguns minutos e configura tudo para você.

E, novamente, você pode usar EZConnect seqüências de conexão para fazer networking configuração um pedaço de bolo, ou usar a variável de entrada de registro TNS_ADMIN ou ambiente para aproveitar pré-existente aliases de conexão que seu cliente já está acostumados a usar.

Espero que isso ajude,

Christian Shay

A Oracle

Sinta-se livre para fornecer seus comentários sobre este e outros recursos futuros em nosso site pedido de recurso: http://apex.oracle.com/pls/apex/f? p = 18357: 46

Outras dicas

Você já olhou para provedores de Oracle alternativos como dotConnect de Devart ? Este driver, como um exemplo, é 100% código gerenciado, suporta muitos Oracle Advanced Features, fornece suporte Entity Framework (que virá algum dia no ODP.NET, tenho certeza).

Há um monte de outras características (como o suporte modelo de provedor ASP.NET) que nós não conseguimos até o lançamento ODP.NET 11g. licenciamento liberal bonita e com preços razoáveis. Também vem com seu próprio profiler, se bem me lembro.

seus testes , realiza favoravelmente comparado com ODP.NET. Eu adoraria apontar-lhe algo de código aberto, mas, na minha experiência, uma vez que você comprou no Oracle como um banco de dados, você já aceitou o fato de que você vai ser, que estabelece algum dinheiro para o seu ferramentas de banco de dados relacionados com o .

Há uma grande diferença entre ser substituído e que está sendo removida.

Se você estiver usando apenas o subconjunto de funcionalidade que é comum a ambos SQL Server e Oracle, em seguida, você deve estar bem se movendo através de ASP.Net 4.0 e continuar a programa como você faz atualmente.

Usando algo como EntitySpaces , iria deixá-lo ser relativamente provedor-agnóstico. (Ele usa OracleClient nele é DAL)

Completamente concordar com Philippe sobre a Oracle do software cliente ser uma dor. Perdi o controle do número de vezes que eu instalado e ele odiava a experiência. Dá-me MySQL, SQLServer ou mesmo acesso em preferência.

(Na verdade, eu ter de volta o comentário Access): -)

Use o "O provedor padrão de fábrica", que é, basicamente, usando uma fábrica para dar um provedor de dados que é completamente abstraída dos métodos de solicitação de banco de dados que usa-lo aqui é um blogpost com algum código de exemplo que mostra como fazer isso também Jean-Paul Boodhoo em Desmistificando design Patterns Parte 1 sobre dnrtv.com mostra como bem.

Isto é alguma coisa muito legal, basicamente você tem uma fábrica que fornece um métodos para obter uma conexão

public IDbConnection GetConnection()
{
     IDbConnection connection =  _frameworkDBProviderFactory.CreateConnection();
     connection.ConnectionString = _authenticationSettings.ConnectionString;            
     return connection;
} 

embora uma interface de modo que você pode chamar qualquer tipo de banco de dados que está conexão objeto implementa a interface IDbConnection (SQLServer, MySQL, Oracle, etc.) e ele simplesmente funciona.

Ao abstrair o DB seu usando você pode até mesmo trocá-los em tempo de execução e sua aplicação nunca vai saber, ele não precisa de modo a conexão com um Orical DB, baixar o ODP.NET , mesma coisa com mysql conector tanto implementar IDbConnection, e escrever o seu código contra a ligação captada.

Além de que os outros têm sugerido que você poderia pensar em usar o padrão Provedor e ODP.NET da Oracle.

Ser independente de banco de dados é um trabalho muito difícil, porque há um monte de coisas específicas (nomenclatura variável de ligação, cotação objeto, ...). Use uma biblioteca como NHibernate que coloca uma camada entre o aplicativo eo banco de dados real.

Se você tem que ligar para ambos os bancos de dados, que é uma questão de implantação. Se você ligar a Oracle (usando System.Data.OracleClient ou Oracle.DataAccess.Client) você precisa de um software cliente Oracle instalado em sua máquina. O provedor de banco de dados implantado com quadro não é suficiente para se conectar a um banco de dados Oracle.

Se você ligar a Oracle, você tem que instalar o software da Oracle. Se você teme a desaprovação, de instalar e usar ODP.Net. Há algumas entre o provedor de banco de dados de 2 oráculo.

Para melhor oráculo implantação introduziu o conceito de cliente instantânea . Este cliente pode implantado usando implantação xcopy. oráculo Sine 11 o cliente instantâneo pode ser empacotado com ODP.Net.

A instalação de ODP.Net é descrito no cargo de Christian Shay.

O Oracle.DataAccess montagem deve não estar em cache de assemblagem global die. Coloque-o em seu diretório bin. O cliente instantânea utilizada por Oracle.DataAccess não deve estar em um diretório diferente em sua máquina cliente. Coloque-o em seu diretório bin. A documentação descreve como configurar seu aplicativo para encontrar um cliente imediato.

faria usando ODBC tanto para ser viável?

Enquanto você não invocar um objeto ODP.Net, você não precisa instalar ODP se apenas o acesso SQL Server.

Eu acredito que ODBC ainda pode usar o SQL Server e Oracle, com alguma transparência, por isso gostaria de dar uma olhada usando ADO.Net com o provedor ODBC. Não vai dar-lhe todo o desempenho ou características que SqlClient ou OracleClient iria, mas deve ser muito perto do mesmo código para Oracle ou SQL Server.

Você pode considerar o uso SubSonic 3.0 ! Eu tenho que executar o meu aplicativo e usuário com base SQLServer, MySQL e SQLite pode alternar entre estes 3 em tempo de execução!

Na minha experiência, você não pode simplesmente implantar o DLL provedor de dados ODP.NET. Oracle requer uma instalação inicial para qualquer coisa mais do que a configuração padrão (por exemplo, usamos a resolução de nomes LDAP, exigindo um arquivo LDAP.ora em um caminho de casa especial).

No entanto, implementos ODP.NET os 2,0 padrões ADO.NET bem (DbProviderFactory, etc). E eu ter programado contra as classes base (DbConnection, DbCommand, etc), sem qualquer necessidade para as classes específicas para algum tempo na minha empresa.

A minha sugestão para fazer este trabalho acesso a dados é a utilização / seguir a orientação na EntLib ou usar NHibernate .

Se você tem uma logística ou TI problema ao instalar ODP.NET ou obtê-lo para o seu cliente / cliente, eu sugiro que você converse com seus TI pessoas e da Oracle sobre as soluções para isso.

O cliente deve instalar odp.net eo cliente Oracle em lá máquinas. Você não deve implantá-lo. Sua aplicação vai encontrar a dll do Oracle necessária está no GAC.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top