REVISIÓN: Pérdida de memoria en el proveedor de SQLOLEDB de MDAC en SERVERDATAONINSERT y tamaño de columna que más de 255

Seleccione idioma Seleccione idioma
Id. de artículo: 302995 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Se memoria produce una pérdida en proveedor Microsoft OLE DB para SQL Server (SQLOLEDB) con SERVERDATAONINSERT cuando el tamaño de columna es mayor que 255.

Solución

Para resolver este problema, obtenga el service pack más reciente de Microsoft MDAC 2.5. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
293312INFO: Cómo obtener la más reciente de MDAC 2.5 Service Pack
También puede resolver este problema al obtener el service pack más reciente para SQL Server 2000, el service pack más reciente de MDAC 2.6 o la revisión mencionada a continuación. Para obtener información adicional, haga clic en el número de artículo siguiente para ver el artículo en Microsoft Knowledge Base:
290211INF: Cómo obtener el Service Pack más reciente de SQL Server 2000
Para obtener información adicional, haga clic en el número de artículo siguiente para ver el artículo en Microsoft Knowledge Base:
300635INFO: Cómo obtener la más reciente de MDAC 2.6 Service Pack

revisión

MDAC 2.5

La versión en inglés de esta revisión debe tener los atributos de archivo siguientes o posteriores:
   Date         Version    Size           File name     Platform
   -------------------------------------------------------------
   04-Jun-2001  7.1.9.99   545,040 bytes  Sqloledb.dll  x86
				
MDAC 2.6

La versión en inglés de esta revisión debe tener los atributos de archivo siguientes o posteriores:
   Date          Version        Size           File name     Platform
   ------------------------------------------------------------------
   11-Jun-2001   2000.80.301.0  491,584 bytes  Sqloledb.dll  x86
   11-Jun-2001   2000.80.301.0   61,440 bytes  Sqloledb.dll  x86
				

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:" de este artículo. Este problema se corrigió por primera vez en MDAC 2.5 Service Pack 3 de Microsoft.Este problema se corrigió por primera vez en SQL Server 2000 Service Pack 2 y Service Pack 2 de MDAC 2.6.

Más información

Pasos para reproducir este comportamiento

  1. En Microsoft SQL Server 2000, cree las siguientes tablas:
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[STATEMIN1]') 
    and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[STATEMIN1]<BR/>
    GO
    
    CREATE TABLE [dbo].[STATEMIN1] (
    	[messagekey] [int] IDENTITY (1, 1) NOT NULL ,
    	[message] [varchar] (2000) NOT NULL 
    ) ON [PRIMARY]
    GO
    
    ALTER TABLE [dbo].[STATEMIN1] WITH NOCHECK ADD 
    	CONSTRAINT [PK_STATEMIN1] PRIMARY KEY  CLUSTERED 
    	(
    		[messagekey]
    	)  ON [PRIMARY] 
    GO
    					
  2. Pegue el código siguiente en una aplicación de consola de Microsoft Visual C++ y, a continuación, compile el código.

    Nota : se deben cambiar el nombre de origen de datos, el IdUsuario y la contraseña.
    #include <afx.h>
    #include <assert.h>
    #include <iostream>
    #include <atldbcli.h>
    #include <objbase.h>
    
    const ULONG nInitProps = 4;
    const ULONG nPropSet = 1;
    const ULONG nParams = 3; //Number of parameters in the command
    const ULONG nProps = 5;
    
    struct StateIn
    	{
    	UINT uiMessageKey;
    	TCHAR pszMessage[257];
    };
    
    int main(void)
    {
       	CCommand<CManualAccessor,CRowset,CNoMultipleResults> rs;
    
    	CDataSource m_connect;
    	CSession m_session;
    	
    	DBPROP    InitProperties[nProps];
    	DBPROPSET   rgInitPropSet;
    
    	USES_CONVERSION;
    	HRESULT   hr;
    
    	hr = CoInitialize(NULL);
    
    	for (ULONG i = 0; i < nProps; i++ )
    	{
    		VariantInit(&InitProperties[i].vValue);
    		InitProperties[i].dwOptions = DBPROPOPTIONS_REQUIRED;
    		InitProperties[i].colid = DB_NULLID;
    	}
    
    	InitProperties[0].dwPropertyID = DBPROP_INIT_PROMPT;
    	InitProperties[0].vValue.vt = VT_I2;
    	InitProperties[0].vValue.iVal = DBPROMPT_NOPROMPT;
    
    	InitProperties[1].dwPropertyID = DBPROP_INIT_DATASOURCE;
    	InitProperties[1].vValue.vt = VT_BSTR;
    	InitProperties[1].vValue.bstrVal = 
             SysAllocString(OLESTR("servername"));                            // Server Name
    
    	InitProperties[2].dwPropertyID = DBPROP_INIT_CATALOG;
    	InitProperties[2].vValue.vt = VT_BSTR;
    	InitProperties[2].vValue.bstrVal = SysAllocString(L"database");    // Database Name
    	InitProperties[2].dwOptions = DBPROPOPTIONS_REQUIRED;
    	InitProperties[2].colid = DB_NULLID;
    
    	InitProperties[3].dwPropertyID = DBPROP_AUTH_USERID;
    	InitProperties[3].vValue.vt = VT_BSTR;
    	InitProperties[3].vValue.bstrVal = SysAllocString(OLESTR("sa"));    // User Id.
    
    	InitProperties[4].dwPropertyID = DBPROP_AUTH_PASSWORD;
    	InitProperties[4].vValue.vt = VT_BSTR;
    	InitProperties[4].vValue.bstrVal = SysAllocString(OLESTR(""));      // Password
    
    	
    	rgInitPropSet.guidPropertySet = DBPROPSET_DBINIT;
    	rgInitPropSet.cProperties = nProps;
    	rgInitPropSet.rgProperties = InitProperties;
    
    	char szProgID[100] = {0};
    	strcpy(szProgID,"SQLOLEDB");
    	CLSID clsid;
    	WCHAR   wszProgId[100] = {0};
    	MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szProgID, -1,   wszProgId, 100);
    	hr = CLSIDFromProgID(wszProgId, &clsid);
    	hr = m_connect.Open(clsid,&rgInitPropSet);
    	hr = m_session.Open(m_connect);
    
    	SysFreeString(InitProperties[1].vValue.bstrVal);
    	SysFreeString(InitProperties[2].vValue.bstrVal);
    	SysFreeString(InitProperties[3].vValue.bstrVal);
    	SysFreeString(InitProperties[4].vValue.bstrVal);
    
    	DWORD dwStatus;
    	dwStatus = DBSTATUS_S_IGNORE;
    
    	CDBPropSet propset(DBPROPSET_ROWSET);
    	propset.AddProperty(DBPROP_IRowsetChange, true);
    	propset.AddProperty(DBPROP_IRowsetUpdate, false);
    	propset.AddProperty(DBPROP_UPDATABILITY,
    		DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);
    	propset.AddProperty(DBPROP_SERVERDATAONINSERT,true);
    
    	StateIn rowValue_StateIn;
    
    	rs.CreateAccessor(2, &rowValue_StateIn, sizeof(rowValue_StateIn));
    
    	rs.AddBindEntry(1, DBTYPE_I4,sizeof(rowValue_StateIn.uiMessageKey), 
              &rowValue_StateIn.uiMessageKey,NULL,&dwStatus);
    	rs.AddBindEntry(2, DBTYPE_STR, sizeof(rowValue_StateIn.pszMessage),
              &rowValue_StateIn.pszMessage,NULL);
    
    	TCHAR * m_strQuery = _T("select * from statemin1");
    	hr = rs.Create(m_session,m_strQuery);
    	hr = rs.Open(&propset);
    	
    	dwStatus = DBSTATUS_S_IGNORE;
    	TCHAR szInsStr[50];
    	strcpy(szInsStr,"test1");
    
    	strcpy(rowValue_StateIn.pszMessage, szInsStr);
    
    	hr = rs.Insert(0,1);
    
    	for(int j = 0;j < 20000;j++)
    	{	
    		strcpy(rowValue_StateIn.pszMessage, szInsStr);
    		hr = rs.Insert(0,1);
    
    	}
    
       	return S_OK;
    }
    					
  3. Iniciar el Monitor de rendimiento y observe cómo el contador bytes privados para el proceso mientras se ejecuta el código.
Para obtener información adicional, haga clic en el número de artículo siguiente para ver el artículo en Microsoft Knowledge Base:
301953SQLOLEDB: Unenlisting desde Directory transacción frente a bloqueos SQL Server 7.0 provoca y anular purgar

Propiedades

Id. de artículo: 302995 - Última revisión: miércoles, 26 de febrero de 2014 - Versión: 4.1
La información de este artículo se refiere a:
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.1 Service Pack 1
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.5 Service Pack 2
  • Microsoft Data Access Components 2.6
Palabras clave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmdac250sp3fix kbbug kbfix kbmdac260sp2fix kbsqlserv2000presp2fix KB302995 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): 302995

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