Metodo CreateDatabase (SQL Server Compact)
Il metodo CreateDatabase crea un nuovo database di Microsoft SQL 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 Microsoft SQL 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 Microsoft SQL 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
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.
Nota:
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 attiva la crittografia sul database. Se si specifica una password, verrà attivata la crittografia sul database. |
ssce: encrypt database |
Valore booleano che determina se il database è crittografato. Deve essere impostato su True per attivare la crittografia, su False per disattivarla. Se il valore non viene specificato, l'impostazione predefinita è False. Se si attiva la crittografia, è necessario specificare anche una password con la proprietà password. Se si specifica una password, la crittografia verrà attivata indipendentemente dalla modalità di impostazione di questa proprietà.
Nota:
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 attivata la compattazione automatica. Impostando il valore 100 verrà disattivata 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:
Tutti gli spazi vuoti, ad eccezione di quelli all'interno di un valore o tra virgolette, vengono ignorati.
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.
Non sono supportate sequenze di escape.
Il tipo di valore è irrilevante.
Ai nomi non viene applicata la distinzione tra maiuscole e minuscole.
Se il nome di una proprietà ricorre più volte nella stringa di connessione, viene utilizzato il valore associato all'ultima occorrenza.
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)