Condividi tramite


Metodo CreateDatabase (SQL Server Compact)

Il metodo CreateDatabase crea un nuovo database di MicrosoftSQL Server Compact 3.5.

Sintassi

object.CreateDatabase(LocalConnection)

Parametri

Parametro

Descrizione

LocalConnection

Valore stringa che specifica il percorso e il nome di file del database da creare.

Prototipo

HRESULT CreateDatabase(BSTR LocalConnection);

Esempio

Nel primo esempio viene illustrato come creare, crittografare, aggiornare, compattare e correggere un database di Microsoft SQL Server Compact 3.5 senza distinzione tra maiuscole e minuscole. Nel secondo esempio viene illustrato come creare, compattare e correggere un database di MicrosoftSQL Server Compact 3.5 con regole di confronto con distinzione tra maiuscole e minuscole. Per ulteriori informazioni sui database di SQL Server Compact con distinzione tra maiuscole e minuscole, vedere Utilizzo delle regole di confronto (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:encrypt database='true';  SSCE:Database Password='123' ; ssce:encryption mode='ppc2003 compatibility';");

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:encrypt database='true';  SSCE:Database Password='123' ; ssce:encryption mode='ppc2003 compatibility';"); 

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='ppc2003 compatibility'; ");

//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;
}

Nell'esempio seguente viene illustrato come creare un database di MicrosoftSQL Server Compact 3.5 con distinzione tra maiuscole e minuscole, come utilizzare il Metodo CompactDatabase (SQL Server Compact) per modificare l'impostazione relativa alla distinzione tra maiuscole e minuscole del database e come creare un database corretto con regole di confronto con distinzione tra maiuscole e minuscole. Per ulteriori informazioni sui database di SQL Server Compact con distinzione tra maiuscole e minuscole, vedere Utilizzo delle regole di confronto (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;
}

Osservazioni

Importante

Il supporto per le regole di confronto con distinzione tra maiuscole e minuscole viene introdotto a partire dalla versione SQL Server Compact 3.5 Service Pack 1 SP1. Per ulteriori informazioni, vedere Utilizzo delle regole di confronto (SQL Server Compact).

Nella tabella seguente vengono elencate le proprietà di connessione supportate in SQL Server Compact 3.5. 

Proprietà

Descrizione

data source

Nome e percorso di file del database di SQL Server Compact 3.5. Specificare il percorso assoluto del file di database, anziché un percorso relativo.

Nota   Un'applicazione in esecuzione su un computer desktop non può aprire una connessione al database in un file .sdf su un dispositivo. Analogamente, un'applicazione in esecuzione in un dispositivo non può aprire una connessione al database in un file con estensione sdf in un computer desktop.

ssce: case sensitive

Valore booleano che determina se al database viene applicata la distinzione tra maiuscole e minuscole. Per abilitare la distinzione tra maiuscole e minuscole, tale valore deve essere impostato su true. In caso contrario, deve essere impostato su false. Se il valore non viene specificato, l'impostazione predefinita è false.

NotaNota
Questa proprietà viene introdotta a partire dalla versione SQL Server Compact 3.5 SP1 Per ulteriori informazioni, vedere Utilizzo delle regole di confronto (SQL Server Compact).

ssce: database password

Password del database, costituita da un massimo di 40 caratteri. Se non viene specificata, l'impostazione predefinita è nessuna password. Questa proprietà è obbligatoria se si abilita la crittografia sul database. Se si specifica una password, verrà abilitata la crittografia sul database.

ssce: encrypt database

Valore booleano che determina se il database è crittografato. Deve essere impostato su True per abilitare la crittografia, su False per disabilitarla. Se il valore non viene specificato, l'impostazione predefinita è False. Se si abilita la crittografia, è necessario specificare anche una password con la proprietà password. Se si specifica una password, la crittografia verrà abilitata indipendentemente dalla modalità di impostazione di questa proprietà.

NotaNota
La proprietà encrypt non verrà supportata nelle versioni future, ma viene mantenuta in SQL Server Compact 3.5 per compatibilità con le versioni precedenti.

ssce:encryption mode

oppure

encryption mode

I valori per questa proprietà sono i seguenti:

engine default

oppure

platform default

oppure

ppc2003 compatibility

L'impostazione predefinita è platform default.

ssce: max buffer size

Quantità massima di memoria, in KB, utilizzabile da SQL Server Compact 3.5 prima che venga avviato lo scaricamento delle modifiche su disco. Se il valore non viene specificato, l'impostazione predefinita è 640.

ssce: max database size

Dimensione massima del database, in MB. Se il valore non viene specificato, l'impostazione predefinita è 128.

ssce:mode

Modalità da utilizzare all'apertura del file di database. Per i valori validi, vedere la tabella riportata di seguito. Se il valore non viene specificato, l'impostazione predefinita è lettura/scrittura.

ssce: default lock timeout

Valore di attesa predefinito, in millisecondi, prima del blocco di una transazione. Se non viene specificato, il valore predefinito è 5000 millisecondi per i computer desktop e 2000 millisecondi per i dispositivi.

ssce: default lock escalation

Numero dei blocchi che devono essere acquisiti da una transazione prima di tentare l'innalzamento di livello da riga a pagina o da pagina a tabella. Se il valore non viene specificato, l'impostazione predefinita è 100.

ssce: flush interval

Specifica l'intervallo di tempo, in secondi, prima che le transazioni di cui è stato eseguito il commit vengano scaricate su disco. Se il valore non viene specificato, l'impostazione predefinita è 10.

ssce: autoshrink threshold

Percentuale di spazio disponibile consentito nel file di database prima che venga abilitata la compattazione automatica. Impostando il valore 100 verrà disabilitata la compattazione automatica. Se il valore non viene specificato, l'impostazione predefinita è 60.

ssce: temp file directory

Percorso del database temporaneo. Se non viene specificato, per impostazione predefinita verrà utilizzato il database specificato nella proprietà dell'origine dati relativa all'archiviazione temporanea.

ssce: temp file max size

Dimensioni massime del file di database temporaneo, in MB. Se il valore non viene specificato, l'impostazione predefinita è 128.

locale identifier

ID delle impostazioni locali (LCID) da utilizzare con il database.

Nella tabella seguente vengono illustrati i valori validi per la proprietà relativa alla modalità della stringa di connessione.

Valore

Definizione

Read Write

Consente a più processi di aprire e modificare il database. Si tratta dell'impostazione predefinita se non viene specificata la proprietà relativa alla modalità.

Sola lettura

Consente di aprire una copia in sola lettura del database.

Exclusive

Non consente ad altri processi di aprire o modificare il database.

Shared Read

Consente ad altri processi di leggere il database aperto, ma non di apportarvi modifiche.

Alle stringhe di connessione vengono applicate le regole seguenti:

  1. Tutti gli spazi vuoti, ad eccezione di quelli all'interno di un valore o tra virgolette, vengono ignorati.

  2. Le coppie parola chiave-valore devono essere separate da un punto e virgola (;). Se un punto e virgola è parte di un valore, è necessario delimitarlo da virgolette.

  3. Non sono supportate sequenze di escape.

  4. Il tipo di valore è irrilevante.

  5. Ai nomi non viene applicata la distinzione tra maiuscole e minuscole.

  6. Se il nome di una proprietà ricorre più volte nella stringa di connessione, viene utilizzato il valore associato all'ultima occorrenza.

  7. I valori possono essere delimitati da virgolette singole o doppie, ad esempio nome='valore' o nome="valore". All'interno di una stringa di connessione possono essere utilizzate virgolette singole o doppie in combinazione con l'altro delimitatore. Di seguito, ad esempio, vengono illustrati utilizzi validi delle virgolette all'interno di una stringa di connessione:

    "data source='MyDb.sdf'; ssce: mode=Exclusive;"
    'data source="MyDb.sdf"; ssce: mode=Exclusive;'
    
    • Questi esempi invece non sono validi:
    "data source="MyDb.sdf"; ssce: mode=Exclusive;"
    'data source='MyDb.sdf'; ssce: mode=Exclusive;'
    

Vedere anche

Altre risorse

Programmazione con l'oggetto Engine (SQL Server Compact)