Errores de función de aplicación de SQL con agrupación de recursos de OLE DB

Seleccione idioma Seleccione idioma
Id. de artículo: 229564 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Al habilitar una función de aplicación de SQL Server en una conexión de ActiveX Data Objects (ADO) a SQL Server, puede recibir el siguiente mensaje de error cuando se conecta a SQL Server 7.0:
No se invocó correctamente sp_setapprole. Consulte la documentación para obtener más información.
Cuando se conecta a SQL Server 2000, el error puede aparecer como sigue:
[DBNETLIB][ConnectionRead (WrapperRead()).]Error general de red. Compruebe su documentación de red
Este error se produce cuando se llama sp_setapprole en una conexión ADO que se ha asignado desde el fondo de recursos OLE DB. Este error se produce con el proveedor SQLOLEDB o ODBC de SQL Server controlador.

La limitación descrita en este artículo también existe en SQL Server .NET proveedor de datos y en .NET de OLE DB proveedor de datos cuando se utiliza con el proveedor OLE DB de SQLOLEDB. Cuando se intenta establecer una función de aplicación en una conexión que se extrae de la agrupación de conexiones, recibirá el siguiente mensaje de error:
Error general de red

Causa

En el diseño actual después de habilitar una función de aplicación en una conexión de cliente a SQL Server, no se puede restablecer el contexto de seguridad de esa conexión. Por lo tanto, cuando el usuario finaliza la sesión de SQL Server y se desconecta del servidor, la sesión no es reutilizable. Sin embargo, OLE DB agrupación de recursos devuelve la conexión cerrada al grupo y se produce el error al reutiliza esa conexión y la aplicación cliente intenta restablecer nuevo contexto de seguridad de conexión llamada sp_setapprole.

Solución

La solución sólo está disponible consiste en Deshabilitar recursos OLE DB agrupación, que ADO utiliza de forma predeterminada. Puede hacerlo agregando "OLE DB Services = -2" en la cadena Connection de ADO, tal como se muestra aquí:
'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"
				

Agrupación puede deshabilitarse para .NET de SQL Server datos proveedor agregando "Pooling = false" a la cadena de conexión.

Más información

El código siguiente reproduce el error:
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
				

REFERENCIAS

Libros en pantalla de SQL; tema: "Seguridad de aplicaciones y funciones de aplicación"

Para obtener más información sobre cómo deshabilitar servicios OLE DB, consulte el artículo técnico "Agrupación en el Microsoft Data Access Components", disponible en MSDN Online:
http://msdn2.microsoft.com/en-us/library/ms810829.aspx
Para obtener más información acerca de cómo desactivar servicios de OLE DB, vea el archivo Readme.txt de OLE DB.

Propiedades

Id. de artículo: 229564 - Última revisión: jueves, 15 de febrero de 2007 - Versión: 4.3
La información de este artículo se refiere 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
Palabras clave: 
kbmt kbfaq kbpending kbprb KB229564 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 229564

Enviar comentarios

 

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