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