Select the product you need help with
Problemas conhecidos para o ADODB PIA Primary Interop Assembly () incluída no Visual Studio 2005Artigo: 910696 - Ver produtos para os quais este artigo se aplica. atenção ADO and ADO MD não foram totalmente testados num ambiente de Microsoft .NET Framework. Podem provocar problemas intermitentes, especialmente nas aplicações baseadas em serviços ou nas aplicações multithread. As técnicas que são discutidas neste artigo só devem ser utilizadas como uma medida temporária durante a migração para ADO.NET. Só deverá utilizar estas técnicas depois realizados concluída testar para se certificar que estão sem problemas de compatibilidade. Problemas causados por utilizar ADO ou ADO MD desta forma não são suportados. Para mais informações, consulte o seguinte artigo na base de dados de conhecimento da Microsoft: 840667
(http://support.microsoft.com/kb/840667/
)
É apresentada erros inesperados quando utilizar o ADO and ADO MD numa aplicação do .NET FrameworkNesta páginaINTRODUÇÃOEste artigo descreve as questões conhecidas para o ADODB PIA Primary Interop Assembly () incluída no Microsoft Visual Studio 2005. Mais InformaçãoDiferenças no recolha de dados entre o Microsoft Visual Basic 6.0 e Microsoft Visual Basic .NETExistirem diferenças principais entre recolha de dados no Visual Basic 6.0 e no Visual Basic. NET. A principal diferença é que recolha de dados do Visual Basic 6.0 é mais agressivo de recolha de dados Visual Basic. NET. Com o Visual Basic 6.0, assim que uma instância de objecto ficar fora do âmbito, o objeto será liberado imediatamente. O mesmo comportamento não ocorre com o Visual Basic .NET ou com recolha de lixo .NET normal. Com a recolha de lixo .NET objectos são libertados assincronamente.A diferença na recolha de dados pode ter um grande efeito no código de acesso a dados quando move a partir do Visual Basic 6.0 para o Visual Basic. NET. Por exemplo, um objecto ADODB Recordset aberto é fechado quando o objecto é recolhido pela colecção de elementos não utilizados. Os programadores que tenham experiência escrever código Visual Basic 6.0 podem depender de semântica de recolha de lixo será alterado quando que migrar código para o Visual Basic. NET. Uma vez que recolha de lixo .NET é assíncrona e não determinista, poderá não ver as alterações mesmo após testes básicos. Algumas bases de dados, tais como bases de dados do Microsoft SQL Server 2000, só suportam um único resultado activo por ligação. Se tiver um cursor firehose abertos numa ligação para o SQL Server, que ligação está bloqueada até que o cursor seja fechado. Por predefinição, fornecedores de OLE DB irão aberta ligações adicionais para executar consultas se a ligação actual não é possível executar essa consulta. Deste modo, muitos utilizadores de ActiveX Data Objects (ADO) são não utilizam esta limitação. Estas ligações adicionais não participar num agrupamento de ligações. Tentativas para abrir ligações adicionais quando a ligação bloqueada está a participar numa transacção falhará. Recomendamos que reveja o código de Visual Basic 6.0 e explicitamente feche todos os objectos de conjunto de registos e ligações. Em seguida, teste novamente o código depois de migrar o código para o Visual Basic. NET. Esta secção apresenta três exemplos desta questão e exemplos de código para cada exemplo. Exemplo 1: Abrir o ligações adicionais quando explicitamente não fechar os objectos conjunto de registosQuando executa o seguinte exemplo de código no Visual Basic 6.0, é necessária apenas uma única ligação. Isto acontece porque o objecto de conjunto de registos que criou no procedimento ExecuteQuery implicitamente é fechado quando o objeto Recordset ficar fora do âmbito. O exemplo de código utiliza a variável de servidor SQL @@ SPID para representar o identificador de processo do servidor que é utilizado para executar a consulta. Se executar o código, irá notar que as consultas devolvem o mesmo valor no @@ spid coluna. Este resultado significa que as consultas foram executar na mesma ligação à base de dados.Este comportamento é diferente porque o objecto de conjunto de registos que foi criado no procedimento ExecuteQuery não foi fechado e permanecerá aberto até que o recolector de lixo .NET limpa o objeto Recordset . Recolha de dados no Microsoft .NET Framework ocorre de forma assíncrona. Se o objecto de conjunto de registos não foi fechado a altura em que o procedimento ExecuteQuery é invocado novamente, o SQL Server fornecedor de OLE DB abrirá uma nova ligação para executar a segunda consulta. Se adicionar uma chamada para o comando rs.Close no procedimento ExecuteQuery , certifique-se de que as consultas são executadas na mesma ligação. Pode saber também explicitamente o SQL Server fornecedor OLE DB não para abrir ligações adicionais. Para tal, adicione a seguinte linha de código imediatamente depois de abrir a ligação: Exemplo 2: Problemas ocorrem quando trabalha com transacções se não fechar explicitamente os objectos conjunto de registosNão é possível abrir ligações adicionais quando a ligação bloqueada está a participar numa transacção. Quando executa o seguinte exemplo de código no Visual Basic 6.0, o código executa consultas múltiplas numa única ligação que tenha uma transacção aberta. O código chama duas funções:
Não é possível criar nova ligação porque no modo de transacção manual ou distribuído. Exemplo 3: Problemas ocorrem quando implicitamente criar e, em seguida, abandonar os objectos conjunto de registosPor predefinição, o método execute dos objectos de ligação e comando implicitamente cria e devolve um novo objecto de conjunto de registos . No Visual Basic 6.0, se este objecto de conjunto de registos não é mantido numa variável de objecto, o objeto Recordset ficar fora do âmbito e é imediatamente fechado. Por este motivo, o seguinte exemplo de código executa com êxito no Visual Basic 6.0. No entanto, receberá a mensagem de erro mencionada de "exemplo 2: problemas ocorrem quando trabalha com transacções se não fechar explicitamente os objectos conjunto de registos" secção se o código for migrado para o Visual Basic .NET.Para resolver este problema, passar o valor adExecuteNoRecords do valor ExecuteOptionsEnum no parâmetro Opções do método de execução . Quando o fizer, pode indicar que o método execute não deverá devolver um objecto de conjunto de registos tal como ilustrado no seguinte código exemplo Problema 2: Microsoft não recomenda a PIA ADODB para cenários de pressãoÉ vivamente desencorajar utilizem a PIA ADODB em cenários de importância, como, por exemplo, nos componentes do Microsoft ASP.NET ou Microsoft COM + multi-utilizador. Quando as equipas de teste do Microsoft testou a PIA ADODB, encontrar as equipas de teste que a PIA ADODB falha em importância. Se o código de acesso de dados .NET tem de executar eficazmente em limite, recomendamos vivamente que escrever o código utilizando ADO.NET.Problema 3: Microsoft não recomenda que utilize a PIA ADODB no modo de 64 bitsÉ vivamente desencorajar utilizem a PIA ADODB em aplicações de 64 bits. Não foi testada a PIA ADODB no modo de 64 bits. A maior parte dos cenários de 64 bits envolvem componentes de lado do servidor muito exigentes, tais como o ASP.NET ou COM +. A PIA ADODB tem conhecidos problemas em execução sob pressão. A disponibilidade limitada de fornecedores de OLE DB 64-bit também torna o modo de 64 bits menos apelativas para trabalhar com a PIA ADODB.Problema 4: Falhas ocorrem quando utiliza execução da consulta atrasado dependenteADODB suporta duas formas de execução da consulta atrasado dependente. Execução da consulta atrasado dependente permite-lhe utilizar o enlace de IDispatch COM para executar consultas como se as consultas foram métodos no objecto de ligação . ADODB suporta os seguintes dois formulários de execução da consulta atrasado dependente:
Os exemplos seguintes ilustram estes problemas. Exemplo 1: Se criar uma segunda consulta atrasado dependente que tenha o mesmo nome, a consulta falhaO exemplo de código seguinte cria duas consultas atrasado dependentes que utilizam o mesmo valor para a propriedade Name do objecto Command .Quando é executado código semelhante no Visual Basic. NET, o objecto Command poderá não ser reclamado pela colecção de elementos não utilizados na altura em que o segundo comando objecto está associado o objeto Connection . Por conseguinte, poderá receber a seguinte mensagem de excepção: Objecto já existe na colecção. Não é possível acrescentar. Exemplo 2: Se contactar uma consulta atrasado dependente numa segunda ligação, a consulta falhaO seguinte exemplo de código executa as seguintes tarefas pela ordem em que são apresentados:
O compilador de Visual Basic .NET não efectua este diferenciação. Na primeira chamada para a consulta "GetCount", o compilador de Visual Basic .NET caches a assinatura de método caso é efectuada outra chamada para um método GetCount num objecto de ligação . Quando o código chama a segunda consulta "GetCount", o Visual Basic .NET reutiliza a assinatura de método em cache para o segundo método GetCount . Porque ADODB gera assinaturas de método exclusivo, a chamada para a segunda consulta atrasado ligação falha. Não existem soluções existem para este cenário. Problema 5: Pode definir alguns tipos de dados variante ADODB para tipos de dados de cadeiaO modelo de objecto ADODB permite-lhe definir algumas propriedades para cadeias de ou para outros objectos ADODB. Por exemplo, a propriedade LigaçãoActiva (ActiveConnection) do objecto Recordset é apresentado no Visual Basic 6.0 Object Browser como um tipo de dados Variant e pode ser definida para um objecto de ligação ou uma cadeia de ligação.Se tiver criado o próprio objecto e pretende suportar esta funcionalidade, tem de criar os acessores de propriedade separado. Para o fazer, utilize código semelhante ao seguinte exemplo de código.
: 6 Uma excepção InvalidCastException acontece quando chamar o método Parameters.AppendA PIA ADODB incluída no Microsoft Visual Studio .NET 2003 e Visual Studio 2005 tem um problema conhecido que ocorre quando chamar o método de Parameters.Append juntamente com um objecto de parâmetro foi criado utilizando o construtor predefinido.O seguinte exemplo de código causará uma excepção InvalidCastException . cmd Problema 7: É problemas trabalhar com componentes que são supostas ADO 2.8 interfacesA PIA ADODB incluída no Visual Studio 2005 é o mesmo componente que foi incluído no Visual Studio .NET 2003 e foi criado utilizando o Microsoft .NET Framework 1.1. A PIA ADODB foi concebida para interagir com o ADO 2.7 interfaces e não foi actualizada para trabalhar com o ADO 2.8 interfaces.Por conseguinte, as tentativas para utilizar a PIA ADODB juntamente com os componentes que expõem ADO interfaces 2.8 irá falhar. Este cenário não é suportado com a PIA ADODB. PropriedadesArtigo: 910696 - Última revisão: quarta-feira, 28 de Novembro de 2007 - Revisão: 2.1 A informação contida neste artigo aplica-se a:
Tradução automática IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 910696
(http://support.microsoft.com/kb/910696/en-us/
)
|




Voltar ao topo








