CORRECÇÃO: Fuga de memória no fornecedor SQLOLEDB MDAC SERVERDATAONINSERT e tamanho da coluna que é maior do que 255

Traduções de Artigos Traduções de Artigos
Artigo: 302995 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Uma fuga de memória ocorre no Microsoft OLE DB Provider para SQL Server (SQLOLEDB) com SERVERDATAONINSERT quando o tamanho da coluna for superior a 255.

Resolução

Para resolver este problema, obtenha o service pack mais recente do Microsoft MDAC 2.5. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
293312INFO: Como obter o mais recente MDAC 2.5 Service Pack
Também poderá resolver este problema obtendo o service pack mais recente do SQL Server 2000, o service pack mais recente do MDAC 2.6 ou a correcção referida abaixo. Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
290211INF: How to Obtain the Latest SQL Server 2000 Service Pack
Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
300635INFO: Como obter o MDAC 2.6 mais recente Service Pack

Correcção

MDAC 2.5

A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro ou posteriores:
   Date         Version    Size           File name     Platform
   -------------------------------------------------------------
   04-Jun-2001  7.1.9.99   545,040 bytes  Sqloledb.dll  x86
				
MDAC 2.6

A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro ou 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
				

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo. Este problema foi corrigido pela primeira vez no MDAC 2.5 Service Pack 3.Este problema foi corrigido pela primeira vez no SQL Server 2000 Service Pack 2 e o MDAC 2.6 Service Pack 2.

Mais Informação

Passos para reproduzir o comportamento

  1. No SQL Server 2000, crie as seguintes tabelas:
    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. Cole o seguinte código numa aplicação de consola do Microsoft Visual C++ e, em seguida, compilar o código.

    Nota : É deve alterar o nome da origem de dados, ID de utilizador e palavra-passe.
    #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 o Monitor de desempenho e veja o contador Private Bytes para o processo durante a execução de código.
Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
301953SQLOLEDB: Unenlisting a partir do Active Directory transacções com o SQL Server 7.0 causas bloqueio e Abort de drenagem

Propriedades

Artigo: 302995 - Última revisão: 26 de fevereiro de 2014 - Revisão: 4.1
A informação contida neste artigo aplica-se 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
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmdac250sp3fix kbbug kbfix kbmdac260sp2fix kbsqlserv2000presp2fix KB302995 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 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: 302995

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