Condividi tramite


Funzione JetAttachDatabase

Si applica a: Windows | Windows Server

Funzione JetAttachDatabase

La funzione JetAttachDatabase collega un file di database da usare con un'istanza di database. Per usare il database, sarà necessario aprirlo successivamente con JetOpenDatabase.

    JET_ERR JET_API JetAttachDatabase(
      __in          JET_SESID sesid,
      __in          const tchar* szFilename,
      __in          JET_GRBIT grbit
    );

Parametri

sesid

Contesto della sessione di database da usare per la chiamata API.

szFilename

Nome del database da collegare.

grbit

Gruppo di bit che specificano zero o più delle opzioni seguenti.

Valore

Significato

JET_bitDbDeleteCorruptIndexes

Se JET_paramEnableIndexChecking è stato impostato, tutti gli indici sui dati Unicode verranno eliminati. Per altre informazioni, vedere le sezione Osservazioni.

JET_bitDbDeleteUnicodeIndexes

Tutti gli indici sui dati Unicode verranno eliminati, indipendentemente dall'impostazione di JET_paramEnableIndexChecking. Per altre informazioni, vedere le sezione Osservazioni.

JET_bitDbUpgrade

Obsoleta. Non usare.

JET_bitDbReadOnly

Impedisce modifiche al database.

Valore restituito

Questa funzione restituisce il tipo di dati JET_ERR con uno dei codici restituiti seguenti. Per altre informazioni sui possibili errori ESE, vedere Errori del motore di archiviazione estendibile e parametri di gestione degli errori.

Codice restituito

Descrizione

JET_errSuccess

Operazione riuscita.

JET_errBackupInProgress

Il collegamento di un database non è consentito durante un backup.

JET_errDatabaseFileReadOnly

Il file di database specificato da szFilename deve essere scrivibile. L'attributo Read-Only non deve essere impostato e il processo in esecuzione deve disporre di privilegi sufficienti per scrivere nel file.

JET_errDatabaseInUse

Il file di database è già aperto da un altro processo.

JET_errDatabaseInvalidPath

È stato specificato un percorso non valido in szFilename. szFilename deve essere diverso da NULL e fare riferimento a un percorso valido.

JET_errDatabaseSharingViolation

Il file di database è già stato collegato da una sessione diversa.

JET_errFileAccessDenied

Il motore di database non può aprire il file di database. Il file può essere in uso da un altro processo o il chiamante potrebbe non disporre di privilegi sufficienti per aprire il file.

JET_errFileNotFound

Il file specificato in szFilename non esiste.

JET_errPrimaryIndexCorrupted

Si è verificato un errore con l'indice primario. Può trattarsi di un danneggiamento fisico, ad esempio il danneggiamento del disco o della memoria. Può anche essere restituito quando si collega un database per l'ultima modifica in un sistema operativo precedente e l'indice primario si trova su una colonna con dati Unicode. Per altre informazioni sugli indici sui dati Unicode, vedere le osservazioni.

JET_errSecondaryIndexCorrupted

Si è verificato un errore con un indice secondario. Può trattarsi di un danneggiamento fisico, ad esempio il danneggiamento del disco o della memoria. Può anche essere restituito quando si collega un database per l'ultima modifica in un sistema operativo precedente e un indice secondario si trova su una colonna con dati Unicode. Per altre informazioni sugli indici sui dati Unicode, vedere le osservazioni. Gli indici secondari vengono ricompilati completamente quando un database viene deframmentato con un'utilità offline usando il comando seguente: esentutl -d.

JET_errTooManyAttachedDatabases

È possibile collegare solo un numero finito di database per ogni istanza. Il limite è attualmente di sette database per istanza.

JET_wrnDatabaseAttached

Avviso non irreversibile che indica che il file di database è già stato allegato da questa sessione.

Commenti

La chiamata a JetAttachDatabase equivale a chiamare JetAttachDatabase2 e a passare un valore pari a zero, ovvero non esiste alcun limite per il parametro cpgDatabaseSizeMax .

Il collegamento di un database scrivibile, ovvero se JET_bitDbReadOnly non è stato specificato nel parametro grbit , aprirà il file esclusivamente a livello di sistema operativo. Nessun altro processo sarà in grado di aprire il file. È possibile che più processi connettino un singolo database aprendoli in modalità di sola lettura.

Il file di database viene scollegato usando JetDetachDatabase o JetDetachDatabase2.

Parametri di controllo dell'indice

Versioni diverse di Windows normalizzano il testo Unicode in modi diversi. Ciò significa che gli indici compilati in una versione di Windows potrebbero non funzionare in altre versioni.

Prima di Windows Server 2003, quando la versione del sistema operativo è cambiata (inclusa l'installazione di un Service Pack), ogni indice sui dati Unicode era potenzialmente danneggiato.

Gli indici creati in Windows Server 2003 e versioni successive vengono contrassegnati con la versione della normalizzazione Unicode con cui sono stati compilati. Gli indici meno recenti non contengono informazioni sulla versione. La maggior parte delle modifiche di normalizzazione Unicode consiste nell'aggiungere nuovi caratteri, i punti di codice che in precedenza non sono definiti e normalizzati in modo diverso. Pertanto, se i dati binari vengono archiviati in una colonna Unicode, verranno normalizzati in modo diverso man mano che vengono definiti nuovi punti di codice.

A partire da Windows Server 2003, il motore di database ESE tiene traccia delle voci di indice Unicode contenenti punti di codice non definiti. Questi valori possono essere usati per correggere un indice quando cambia il set di caratteri Unicode definiti.

Questi parametri controllano cosa accade quando il motore di database ESE si collega a un database usato per l'ultima volta in una build diversa del sistema operativo. La versione del sistema operativo viene contrassegnata nell'intestazione del database.

Se JET_paramEnableIndexChecking è impostato su TRUE e il database contiene indici potenzialmente danneggiati:

  • JetAttachDatabase eliminerà gli indici potenzialmente danneggiati se grbit contiene JET_bitDbDeleteCorruptIndexes

  • JetAttachDatabaserestituirà un errore se grbit non contiene JET_bitDbDeleteCorruptIndexes e sono presenti indici che richiedono l'eliminazione.

Se JET_paramEnableIndexChecking è impostato su FALSE:

  • JetAttachDatabase ignorerà gli indici potenzialmente danneggiati e restituirà JET_errSuccess (presupponendo che non vi siano altri errori).

Windows Server 2003 e versioni successive: se JET_paramEnableIndexChecking non è stato reimpostato, la tabella di correzione interna verrà usata per correggere le voci dell'indice. Questa operazione potrebbe non correggere tutti i danneggiamenti dell'indice, ma sarà trasparente per l'applicazione.

Se il database è stato collegato come di sola lettura, l'indice non può essere corretto o eliminato. In questo caso, l'API restituirà invece un errore, ad esempio JET_errSecondaryIndexCorrupted o JET_errPrimaryIndexCorrupted.

Requisiti

Requisito Valore

Client

Richiede Windows Vista, Windows XP o Windows 2000 Professional.

Server

Richiede Windows Server 2008, Windows Server 2003 o Windows 2000 Server.

Intestazione

Dichiarato in Esent.h.

Libreria

Usare ESENT.lib.

DLL

Richiede ESENT.dll.

Unicode

Implementato come JetAddColumnW (Unicode) e JetAddColumnA (ANSI).

Vedere anche

File del motore di archiviazione estendibili
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetAttachDatabase2
JetCreateDatabase
JetDetachDatabase
JetDetachDatabase2
JetOpenDatabase
JetSetSystemParameter