DetailPage-MSS-KB

Base de Dados de Conhecimento

Artigo: 229564 - Última revisão: quinta-feira, 15 de Fevereiro de 2007 - Revisão: 4.3

 

Nesta página

Sintomas

Quando activa uma função de aplicação do SQL Server numa ligação Microsoft ActiveX Data Objects (ADO) para o SQL Server, poderá receber a seguinte mensagem de erro quando liga ao SQL Server 7.0:
sp_setapprole não foi chamado correctamente. Consulte a documentação para obter mais informações.
Quando liga ao SQL Server 2000, o erro poderá ser apresentada da seguinte forma:
[DBNETLIB][ConnectionRead (WrapperRead()).]Erro geral de rede. Consulte a documentação da rede
Este erro ocorre quando é chamado sp_setapprole numa ligação ADO que foi atribuída do conjunto de recursos OLE DB. Este erro ocorre com o ODBC SQL Server ou o fornecedor SQLOLEDB controlador.

A limitação é descrita neste artigo também existe no .NET do SQL Server Data Provider e o .NET de OLE DB Data Provider quando utilizado com o SQLOLEDB fornecedor de OLE DB. Quando tentar definir uma função de aplicação numa ligação é retirada do conjunto de ligações, receberá a seguinte mensagem de erro:
Erro geral de rede

Causa

Na estrutura actual, após uma função de aplicação é activada numa ligação cliente para o SQL Server, não é possível repor contexto de segurança de ligação. Por conseguinte, quando o utilizador termina a sessão do SQL Server e desliga do servidor, a sessão não é reutilizável. No entanto, OLE DB agrupamento de recursos devolve a ligação fechada para o conjunto e o erro ocorre quando essa ligação é reutilizada e a aplicação cliente tentar repor contexto de segurança da ligação, sp_setapprole chamada novamente.

Como contornar

A solução só está disponível consiste em Desactivar OLE DB recursos Pooling o ADO utiliza por predefinição. Pode fazê-lo adicionando "Serviços de OLE DB = entre -2" a cadeia de ligação ADO, tal 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"
				

Pooling pode ser desactivada para o .NET do SQL Server Data fornecedor adicionando "Pooling = FALSE" para a cadeia de ligação.

Mais Informação

O seguinte código 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

SQL Books Online; tópico: "Aplicações e aplicações funções de segurança"

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

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áticaTraduçã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: 229564  (http://support.microsoft.com/kb/229564/en-us/ )
Partilhar
Opções de suporte adicionais
Fóruns de Suporte da Comunidade Microsoft
Contacte-nos directamente
Encontre um parceiro certificado Microsoft
Loja Microsoft