Erros de função de aplicativo SQL com o pool de recursos OLE

Traduções deste artigo Traduções deste artigo
ID do artigo: 229564 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Quando você habilita uma função de aplicativo do SQL Server em uma conexão de Microsoft ActiveX Data Objects (ADO) para o SQL Server, você receberá a seguinte mensagem de erro quando você se conectar ao SQL Server 7.0:
sp_setapprole não foi chamado corretamente. Consulte a documentação para obter mais informações.
Quando você se conecta ao SQL Server 2000, o erro pode aparecer da seguinte maneira:
[DBNETLIB][ConnectionRead (WrapperRead()).]Erro geral de rede. Verifique a documentação de rede
Este erro ocorre quando sp_setapprole é chamado em uma conexão ADO que foi alocada do OLE DB pool de recursos. Este erro ocorre com o provedor SQLOLEDB ou o ODBC para SQL Server driver.

A limitação é descrita neste artigo também existe no .NET do SQL Server provedor de dados e no .NET OLE provedor de dados quando usado com o provedor SQLOLEDB OLE DB. Quando você tenta definir uma função de aplicativo em uma conexão é obtida do pool de conexão, você receber a seguinte mensagem de erro:
Erro geral de rede

Causa

No projeto atual, depois que uma função de aplicativo é habilitada em uma conexão de cliente para SQL Server, você não pode redefinir o contexto de segurança dessa conexão. Portanto, quando o usuário termina a sessão do SQL Server e o servidor se desconectem, a sessão não é reutilizável. No entanto, OLE DB pool de recursos retorna a conexão fechada para o pool e o erro ocorre quando a conexão é reutilizada e o aplicativo cliente tenta redefinir o contexto de segurança da conexão por sp_setapprole chamada novamente.

Como Contornar

A solução alternativa só está disponível é desativar recurso OLE DB pooling, que ADO usa por padrão. Você pode fazer isso adicionando "serviços OLE DB =-2" à seqüência de conexão ADO, como mostrado aqui:
'For SQLOLEDB provider
 'strConnect = "Provider=SQLOLEDB;server=SQL7Web;OLE DB Services = -2;uid=AppUser;pwd=AppUser;initial catalog=northwind"

' For MSDASQL provider 
'strConnect = "DSN=SQLNWind;UID=Test;PWD=Test; OLE DB Services= -2"
				

Pool pode ser desativado para o .NET do SQL Server Data Provider adicionando "pool = False" à seqüência de conexão.

Mais Informações

O código a seguir reproduz o erro:
Private Sub Command2_Click()
 Dim adoCn1 As ADODB.Connection
 Dim adoCn2 As ADODB.Connection

 Set adoCn1 = GetConnection
 
 Set adoCn2 = GetConnection
 Set adoCn2 = Nothing
 Set adoCn2 = GetConnection
 Set adoCn2 = Nothing
 Set adoCn2 = GetConnection  'Gives errors for both SQLOLEDB and ODBC
 Set adoCn2 = Nothing
End Sub

Private Function GetConnection() As ADODB.Connection
 Dim cn As ADODB.Connection
 Dim sSQL As String
 Dim strConnect As String

 Set cn = New ADODB.Connection
 
'For OLE DB provider
 strConnect = "Provider=SQLOLEDB;server=myServer;uid=AppUser;pwd=AppUser;initial catalog=northwind"

'Turn off Pooling ( all other services are enabled )
'strConnect = "Provider=SQLOLEDB;server=myServer;OLE DB Services= -2;uid=AppUser;pwd=AppUser;initial catalog=northwind"
 
 'For ODBC driver
 'strConnect = "DSN=SQLNWind;UID=Test;PWD=Test; "

'Turn off Pooling
'strConnect = "DSN=SQLNWind;UID=Test;PWD=Test; OLE DB Services= -2"

cn.ConnectionString = strConnect
cn.Open
 
 sSQL = "sp_setapprole 'order_entry', 'password'"
 cn.Execute sSQL
 Set GetConnection = cn
End Function
				

REFERÊNCIAS

Manuais online do SQL; tópico: "Segurança de aplicativos e funções de aplicativo"

Para obter mais informações sobre como desativar serviços de banco de dados OLE, consulte o artigo técnico "Pool do Microsoft Data Access Components," disponível no MSDN online:
http://msdn2.microsoft.com/en-us/library/ms810829.aspx
Para obter mais informações sobre como desativar serviços de banco de dados OLE, consulte o arquivo Readme.txt OLE DB.

Propriedades

ID do artigo: 229564 - Última revisão: quinta-feira, 15 de fevereiro de 2007 - Revisão: 4.3
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft Data Access Components 2.0
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
  • Microsoft Data Access Components 2.8
Palavras-chave: 
kbmt kbfaq kbpending kbprb KB229564 KbMtpt
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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 229564

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com