Partager via


Méthode CreateDatabase (SQL Server Compact)

La méthode CreateDatabase crée une base de données MicrosoftSQL Server Compact 4.0.

Syntaxe

object.CreateDatabase(LocalConnection)

Paramètres

Paramètre

Description

LocalConnection

Valeur de chaîne indiquant le chemin d'accès et le nom de fichier de la base de données à créer.

Prototype

HRESULT CreateDatabase(BSTR LocalConnection);

Exemple

Le premier exemple montre comment créer, chiffrer, mettre à niveau, compacter et réparer une base de données MicrosoftSQL Server Compact 4.0 qui ne respecte pas la casse. Le second exemple montre comment créer, compresser et réparer une base de données Microsoft SQL Server Compact 4.0 avec un classement qui respecte la casse. Pour plus d'informations sur les bases de données SQL Server Compact qui respectent la casse, consultez Utilisation des classements (SQL Server Compact).

// The first example:
// ClientAgent.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

// Include OS Header files
//

#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include<iostream>
// Include OS Header files
//
#include <sqlce_err.h>
#include <sqlce_oledb.h>
#include <sqlce_sync.h>

#define ExitOnFail(hr)              { if (FAILED(hr)) goto Exit; }
#define ExitOnNull(ptr)             { if (NULL == (ptr)) goto Exit; }
#define ExitOnFailOrNull(hr, ptr)   { ExitOnFail(hr); ExitOnNull(ptr); }
#define ExitOnAnyFailure(hr, pErr)  { ExitOnFail(hr); if (FAILED(pErr->GetMajor())) goto Exit; }
#define SAFERELEASE(ptr)            { if (NULL != ptr) ptr->Release(); ptr = NULL; }
#define DELNULL(ptr)                { if (NULL != ptr) delete ptr; ptr = NULL; }

#define WAIT_FOR_KEY_OUT(hr) {\
    printf("\n\nHRESULT = %lu (0x%08x)\n", hr, hr);\
    printf("Press ENTER to continue ...\n");\
    getchar();\
}

#define WAIT_FOR_KEY() {\
    printf("\nPress ENTER to continue ...\n");\
    getchar();\
}

//Files

BSTR connStrCreate = NULL;

BSTR connStrSrc = NULL;
BSTR connStrDst = NULL;

BSTR connStrCompactin = NULL;
BSTR connStrCompactout = NULL; 

BSTR connStrRepairedin = NULL;
BSTR connStrRepairedout = NULL;

HRESULT GetInterfacePointers(
    ISSCEEngine   **ppEngine, 
    ISSCEError    **ppErr = NULL
)
{
    HRESULT hr = NOERROR;

    if (NULL != ppEngine)
    {
        *ppEngine = (ISSCEEngine *) NULL; 

        hr = CoCreateInstance(CLSID_Engine, NULL, 
            CLSCTX_INPROC_SERVER, IID_ISSCEEngine, (LPVOID *) ppEngine);

        ExitOnFailOrNull(hr, *ppEngine);
    }

    if (NULL != ppErr)
    {
        *ppErr = (ISSCEError *) NULL;

        hr = CoCreateInstance(CLSID_SSCEError, NULL, 
            CLSCTX_INPROC_SERVER, IID_ISSCEError, (LPVOID *) ppErr);

        ExitOnFailOrNull(hr, *ppErr);
    }

Exit:
    return hr;
}


int _tmain(int argc, _TCHAR* argv[])
{
    ISSCEEngine  *pEngine = NULL;
    ISSCEError   *pError = NULL;

    HRESULT hr = NOERROR;
BSTR connStrCreate = SysAllocString((const OLECHAR*)L"Data Source=C:\\created35.sdf; SSCE:Database Password='123'; ");

BSTR connStrSrc = SysAllocString((const OLECHAR*)L"Data Source=C:\\encrypted31.sdf; SSCE:Database Password='123' ;");
BSTR connStrDst = SysAllocString((const OLECHAR*)L"Data Source=C:\\31upgradedto35.sdf; SSCE:Database Password='123' ; SSCE:Database Password='123' ; ssce:encryption mode=' platform default';");

BSTR connStrCompactin = SysAllocString((const OLECHAR*)L"Data Source=C:\\encryptedC35.sdf; SSCE:Database Password='encrypt' ; ");
BSTR connStrCompactout = SysAllocString((const OLECHAR*)L"Data Source='C:\\35compacted.sdf'; SSCE:Database Password='123' ; SSCE:Database Password='123' ; ssce:encryption mode= ’platform default’;"); 

BSTR connStrRepairedin = SysAllocString((const OLECHAR*)L"Data Source=C:\\encryptedR35.sdf; SSCE:Database Password='encrypt'");
BSTR connStrRepairedout = SysAllocString((const OLECHAR*)L"Data Source=C:\\35repaired.sdf;  SSCE:Database Password='123' ; ssce:encryption mode=' platform default'; ");

//DeleteFile(L"c:\\created35.sdf");
//DeleteFile(L"c:\\encrypted31.sdf");
//DeleteFile(L"c:\\31upgradedto35.sdf");
//DeleteFile(L"c:\\encryptedC35.sdf");
//DeleteFile(L"c:\\35compacted.sdf");
//DeleteFile(L"c:\\encryptedR35.sdf");
//DeleteFile(L"c:\\35repaired.sdf");

    CoInitialize(NULL);

    hr = GetInterfacePointers(&pEngine, &pError);
ExitOnFail(hr);

// test create
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrCreate);
printf("\n for create error=%lu",hr);

// test upgrade
// NOTE: you need a older ssce database for this - this wont work otherwise.
//
hr = NOERROR;
    hr = pEngine->UpgradeDatabase(connStrSrc, connStrDst);
printf("\n for upgrade error=%lu",hr);
    
// test compact
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrCompactin);
printf("\n for create error=%lu",hr);

hr = NOERROR;
hr=pEngine->CompactDatabase(connStrCompactin,connStrCompactout);
printf("\n for compact error=%lu",hr);

// test repair
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrRepairedin);
printf("\n for create error=%lu",hr);

hr = NOERROR;
hr=pEngine->Repair(connStrRepairedin,connStrRepairedout,RECOVERCORRUPTED);
printf("\n for repair error=%lu",hr);
    hr = NOERROR;

Exit:
    SysFreeString(connStrCreate);
    SysFreeString(connStrSrc);
    SysFreeString(connStrDst);
    SysFreeString(connStrCompactin);
    SysFreeString(connStrCompactout);
    SysFreeString(connStrRepairedin);
    SysFreeString(connStrRepairedout);
    CoUninitialize();
    WAIT_FOR_KEY_OUT(hr);
    return 0;
}

L'exemple suivant montre comment créer une base de données Microsoft SQL Server Compact 4.0 qui respecte la casse, comment utiliser la Méthode CompactDatabase (SQL Server Compact) pour modifier le paramètre de respect de la casse de la base de données et comment créer une base de données réparée avec un classement qui respecte la casse. Pour plus d'informations sur les bases de données SQL Server Compact qui respectent la casse, consultez Utilisation des classements (SQL Server Compact).

// The second example:
// ClientAgent2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

// Include OS Header files
//

#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include<iostream>
// Include OS Header files
//
#include <sqlce_err.h>
#include <sqlce_oledb.h>
#include <sqlce_sync.h>

#define ExitOnFail(hr)              { if (FAILED(hr)) goto Exit; }
#define ExitOnNull(ptr)             { if (NULL == (ptr)) goto Exit; }
#define ExitOnFailOrNull(hr, ptr)   { ExitOnFail(hr); ExitOnNull(ptr); }
#define ExitOnAnyFailure(hr, pErr)  { ExitOnFail(hr); if (FAILED(pErr->GetMajor())) goto Exit; }
#define SAFERELEASE(ptr)            { if (NULL != ptr) ptr->Release(); ptr = NULL; }
#define DELNULL(ptr)                { if (NULL != ptr) delete ptr; ptr = NULL; }

#define WAIT_FOR_KEY_OUT(hr) {\
    printf("\n\nHRESULT = %lu (0x%08x)\n", hr, hr);\
    printf("Press ENTER to continue ...\n");\
    getchar();\
}

#define WAIT_FOR_KEY() {\
    printf("\nPress ENTER to continue ...\n");\
    getchar();\
}

//Files

BSTR connStrCreate = NULL;

BSTR connStrSrc = NULL;

BSTR connStrCompactin = NULL;
BSTR connStrCompactout = NULL; 

BSTR connStrRepairedin = NULL;
BSTR connStrRepairedout = NULL;

HRESULT GetInterfacePointers(
    ISSCEEngine   **ppEngine, 
    ISSCEError    **ppErr = NULL
)
{
    HRESULT hr = NOERROR;

    if (NULL != ppEngine)
    {
        *ppEngine = (ISSCEEngine *) NULL; 

        hr = CoCreateInstance(CLSID_Engine, NULL, 
            CLSCTX_INPROC_SERVER, IID_ISSCEEngine, (LPVOID *) ppEngine);

        ExitOnFailOrNull(hr, *ppEngine);
    }

    if (NULL != ppErr)
    {
        *ppErr = (ISSCEError *) NULL;

        hr = CoCreateInstance(CLSID_SSCEError, NULL, 
            CLSCTX_INPROC_SERVER, IID_ISSCEError, (LPVOID *) ppErr);

        ExitOnFailOrNull(hr, *ppErr);
    }

Exit:
    return hr;
}


int _tmain(int argc, _TCHAR* argv[])
{
    ISSCEEngine  *pEngine = NULL;
    ISSCEError   *pError = NULL;

    HRESULT hr = NOERROR;

BSTR connStrCreate = SysAllocString((const OLECHAR*)L"Data source=C:\\created35.sdf; SSCE:case sensitive=true; SSCE:Database Password='123'");

BSTR connStrCompactin = SysAllocString((const OLECHAR*)L"Data Source=C:\\compactIn35.sdf; SSCE:Database Password='123'");
BSTR connStrCompactout = SysAllocString((const OLECHAR*)L"Data Source='C:\\compactOut35.sdf'; SSCE:Database Password='123'; SSCE:case sensitive=true;"); 

BSTR connStrRepairedin = SysAllocString((const OLECHAR*)L"Data Source=C:\\repairIn35.sdf; SSCE:Database Password='123';");
BSTR connStrRepairedout = SysAllocString((const OLECHAR*)L"Data Source=C:\\repairOut35.sdf; SSCE:Database Password='123' ; SSCE:case sensitive=true;");

//DeleteFile(L"c:\\created35.sdf");
//DeleteFile(L"c:\\compactIn35.sdf");
//DeleteFile(L"c:\\compactOut35.sdf");
//DeleteFile(L"c:\\repairIn35.sdf");
//DeleteFile(L"c:\\repairOut35.sdf");

    CoInitialize(NULL);

    hr = GetInterfacePointers(&pEngine, &pError);
ExitOnFail(hr);

// test create
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrCreate);
printf("\n for create error=%lu",hr);

// test compact
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrCompactin);
printf("\n for create error=%lu",hr);

hr = NOERROR;
hr=pEngine->CompactDatabase(connStrCompactin,connStrCompactout);
printf("\n for compact error=%lu",hr);

// test repair
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrRepairedin);
printf("\n for create error=%lu",hr);

hr = NOERROR;
hr=pEngine->Repair(connStrRepairedin,connStrRepairedout,RECOVERCORRUPTED);
printf("\n for repair error=%lu",hr);
    hr = NOERROR;

Exit:
    SysFreeString(connStrCreate);
    SysFreeString(connStrSrc);
    SysFreeString(connStrCompactin);
    SysFreeString(connStrCompactout);
    SysFreeString(connStrRepairedin);
    SysFreeString(connStrRepairedout);
    CoUninitialize();
    WAIT_FOR_KEY_OUT(hr);
    return 0;
}

Notes

Important

À compter de la version SQL Server Compact 3.5 Service Pack 1 SP1, les classements qui respectent la casse sont également pris en charge. Pour plus d'informations, consultez Utilisation des classements (SQL Server Compact).

Le tableau ci-dessous répertorie les propriétés de connexion prises en charge dans SQL Server Compact 4.0. 

Propriété

Description

data source

Chemin d'accès au fichier et nom de la base de données SQL Server Compact 4.0 Vous devez spécifier le chemin d'accès absolu au fichier de base de données, plutôt que le chemin relatif.

Remarque   Une application exécutée sur un ordinateur de bureau ne peut pas établir de connexion de base de données à un fichier .sdf sur un appareil. De même, une application exécutée sur un appareil ne peut pas établir de connexion de base de données à un fichier .sdf sur un ordinateur de bureau.

ssce: case sensitive

Valeur booléenne qui détermine si la base de données respecte la casse. Vous devez lui attribuer la valeur True pour activer le respect de la casse ou False pour indiquer le non-respect de la casse. Si elle n'est pas spécifiée, la valeur par défaut est False.

RemarqueRemarque
Cette propriété est disponible à compter de la version SQL Server Compact 4.0 SP1. Pour plus d'informations, consultez Utilisation des classements (SQL Server Compact).

ssce: database password

Mot de passe de la base de données, qui peut contenir jusqu'à 40 caractères. S'il n'est pas spécifié, la valeur par défaut correspond à l'absence de mot de passe. Cette propriété est requise si vous activez le chiffrement sur la base de données. Si vous spécifiez un mot de passe, le chiffrement est activé sur la base de données.

ssce:encryption mode

- ou -

encryption mode

Les valeurs pour cette propriété sont

engine default

- ou -

platform default

ssce: max buffer size

Quantité maximale de mémoire, en kilo-octets, que SQL Server Compact 4.0 peut utiliser avant de commencer à vider les modifications vers le disque. Si elle n'est pas spécifiée, la valeur par défaut est 640.

ssce: max database size

Taille maximale de la base de données, en mégaoctets. Si elle n'est pas spécifiée, la valeur par défaut est 128.

ssce:mode

Mode à utiliser lorsque vous ouvrez le fichier de base de données. Le tableau ci-après répertorie les valeurs possibles. S'il n'est pas spécifié, la valeur par défaut est Read/Write.

ssce: default lock timeout

Durée par défaut, en millisecondes, pendant laquelle une transaction attend un verrou. Si elle n'est pas spécifiée, la valeur par défaut est 5 000 millisecondes pour les ordinateurs de bureau et 2 000 millisecondes pour les appareils.

ssce: default lock escalation

Nombre de verrous acquis par une transaction avant que vous tentiez une escalade d'une ligne vers une page ou d'une page vers une table. S'il n'est pas spécifié, la valeur par défaut est 100.

ssce: flush interval

Délai au terme duquel toutes les transactions validées sont vidées vers le disque. S'il n'est pas spécifié, la valeur par défaut est 10.

ssce: autoshrink threshold

Pourcentage d'espace disponible autorisé dans le fichier de base de données avant le démarrage de la réduction automatique. La valeur 100 désactive la réduction automatique. S'il n'est pas spécifié, la valeur par défaut est 60.

ssce: temp file directory

Emplacement de la base de données temporaire. S'il n'est pas spécifié, la procédure par défaut consiste à utiliser la base de données indiquée dans la propriété source de données du stockage temporaire.

ssce: temp file max size

Taille maximale du fichier de base de données temporaire, en mégaoctets. Si elle n'est pas spécifiée, la valeur par défaut est 128.

locale identifier

Identificateur de paramètres régionaux (LCID) à utiliser avec la base de données.

Le tableau ci-après indique les valeurs possibles pour la propriété du mode de la chaîne de connexion.

Valeur

Définition

Read Write

Permet à plusieurs processus d'ouvrir et de modifier la base de données. Il s'agit de la valeur par défaut si la propriété du mode n'est pas spécifiée.

Read Only

Vous permet d'ouvrir une copie de la base de données en lecture seule.

Exclusive

Ne permet pas aux autres processus d'ouvrir ou de modifier la base de données.

Shared Read

Permet aux autres processus de lire la base de données alors qu'elle est ouverte, mais pas de la modifier.

Les règles suivantes s'appliquent aux chaînes de connexion :

  1. Tous les caractères vierges, à l'exception de ceux à l'intérieur d'une valeur ou entre guillemets doubles, sont ignorés.

  2. Les paires de valeurs de mot clé doivent être séparées par un point-virgule (;). Si un point-virgule fait partie d'une valeur, il doit être délimité par des guillemets.

  3. Aucune séquence d'échappement n'est prise en charge.

  4. Le type de valeur n'est pas pertinent

  5. Les noms ne respectent pas la casse.

  6. Si un nom de propriété apparaît à plusieurs reprises dans la chaîne de connexion, c'est la valeur associée à la dernière occurrence qui est utilisée.

  7. Les valeurs peuvent être délimitées par des guillemets simples ou doubles, par exemple name='valeur' ou name=valeur. Vous pouvez employer des guillemets simples (ou doubles) dans une chaîne de connexion, à condition d'utiliser des guillemets doubles (ou simples) en guise de délimiteurs. Par exemple, les exemples suivants d'utilisation de guillemets à l'intérieur d'une chaîne de connexion sont valides :

    "data source='MyDb.sdf'; ssce: mode=Exclusive;"
    'data source="MyDb.sdf"; ssce: mode=Exclusive;'
    
    • En revanche, ces exemples ne sont pas valides :
    "data source="MyDb.sdf"; ssce: mode=Exclusive;"
    'data source='MyDb.sdf'; ssce: mode=Exclusive;'
    

Voir aussi

Autres ressources

Programmation de l'objet Engine (SQL Server Compact)