Condividi tramite


Procedura: Compattazione di un database (a livello di programmazione)

In questo argomento viene illustrato come compattare un database di SQL Server Compact 3.5 utilizzando il metodo Compact dell'oggetto SqlServerCe.Engine e il metodo Shrink dell'oggetto SqlServerCe.Engine. I metodi Compact e Shrink presentano alcune differenze nella modalità di riduzione delle dimensioni dei database.

Il metodo Compact consente di recuperare spazio nel file di database. Può inoltre essere utilizzato per modificare le impostazioni del database, ad esempio quelle relative all'ID delle impostazioni locali (LCID) e alla password. Quando si compatta un database viene creato un nuovo file di database, le pagine delle tabelle vengono riorganizzate in modo che risiedano in pagine di database adiacenti e lo spazio inutilizzato viene recuperato mediante la riscrittura di tutti i dati del database in nuove pagine di dati.

Per recuperare spazio nel file di database, è possibile utilizzare anche il metodo Shrink. Il metodo Shrink non può, tuttavia, essere utilizzato per modificare le impostazioni del database, perché Shrink non consente di creare un nuovo file di database, ma solo di riorganizzare i record ed eliminare i record vuoti.

In questo argomento vengono inoltre fornite informazioni sull'utilizzo del metodo Compact per modificare l'impostazione relativa alla distinzione tra maiuscole e minuscole di un database di SQL Server Compact.

Per ulteriori informazioni su Compact e Shrink, vedere Gestione di database (SQL Server Compact). Per ulteriori informazioni sull'utilizzo dello spazio dei nomi SqlServerCe, vedere la documentazione di riferimento dello spazio dei nomi SqlServerCe.

Procedure per SQL Server Compact 3.5

Per compattare un database

  1. Creare un oggetto Engine e passare la stringa di connessione al database esistente che si desidera compattare.

    SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
    
  2. Chiamare il metodo Compact. Quando si chiama il metodo Compact, è inoltre possibile specificare nuove proprietà del database e aggiungervi ad esempio una password di protezione o la crittografia.

    engine.Compact("Data Source=; Password = <enterStrongPasswordHere>");
    

Per compattare un database

  1. Creare un oggetto Engine e passare la stringa di connessione al database che si desidera compattare.

    SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
    
  2. Chiamare il metodo Shrink.

    engine.Shrink();
    

Per modificare la distinzione tra maiuscole e minuscole di un database compatto

  1. Creare un oggetto Engine e passare la stringa di connessione al database esistente che si desidera compattare.

    SqlCeEngine engine = 
         new SqlCeEngine("Data Source= Test.sdf; LCID= 1033");
    
  2. Chiamare il metodo Compact. Quando si chiama il metodo Compact, è possibile inoltre specificare una nuova proprietà del database, ad esempio la distinzione tra maiuscole e minuscole. Se non si specifica "Case Sensitive" quando si chiamata il metodo Compact, l'impostazione relativa alla distinzione tra maiuscole e minuscole non viene modificata.

    engine.Compact("Data Source= Test.sdf; LCID= 1033; Case Sensitive=true");
    

Nota

La distinzione tra maiuscole e minuscole è stata introdotta a partire da SQL Server Compact 3.5 versione SP1. Per ulteriori informazioni, vedere Utilizzo delle regole di confronto (SQL Server Compact).

Esempio

In questo esempio viene compattato un database esistente di SQL Server Compact 3.5 e viene illustrato come modificarne le proprietà.

SqlCeEngine engine = new SqlCeEngine("Data Source = AdventureWorks.sdf");

// Specify null destination connection string for in-place compaction
//
engine.Compact(null);

// Specify connection string for new database options
//
engine.Compact("Data Source=; Password =<enterStrongPasswordHere>");
Dim engine As New SqlCeEngine("Data Source = AdventureWorks.sdf")

 ' Specify null destination connection string for in-place compaction
engine.Compact(Nothing)

' Specify connection string for new database options
'
engine.Compact("Data Source=; Password =<enterStrongPasswordHere>")

Nell'esempio seguente viene compattato un database esistente di SQL Server Compact 3.5.

SqlCeEngine engine = new SqlCeEngine("Data Source = AdventureWorks.sdf");
engine.Shrink();
Dim engine As New SqlCeEngine("Data Source = AdventureWorks.sdf")
engine.Shrink()

Nell'esempio seguente viene illustrato come utilizzare il metodo Compact per modificare l'impostazione relativa alla distinzione tra maiuscole e minuscole di un database di SQL Server Compact. Successivamente nell'esempio di codice viene chiamato il metodo GetDatabaseInfo per recuperare le impostazioni locali, la modalità di crittografia e il valore relativo alla distinzione tra maiuscole e minuscole del database.

// Default case-insentive connection string.
string connStringCI = "Data Source= Test.sdf; LCID= 1033";

// Set "Case Sensitive" to true to change the collation from CI to CS.
string connStringCS = 
    "Data Source= Test.sdf; LCID= 1033; Case Sensitive=true"; 

if (File.Exists("Test.sdf"))
{
   File.Delete("Test.sdf");
}

SqlCeEngine engine = new SqlCeEngine(connStringCI);
// The collation of the database is case-insensitive.
engine.CreateDatabase();

// The collation of the database will be case-sensitive because of 
// the new connection string used by the Compact method.  
engine.Compact(connStringCS);

SqlCeConnection conn = null;
conn = new SqlCeConnection(connStringCS);
conn.Open();

//Retrieve the connection string information - notice the 'Case 
// Sensitive' value.
List<KeyValuePair<string, string>> dbinfo = conn.GetDatabaseInfo();

Console.WriteLine("\nGetDatabaseInfo() results:");

foreach (KeyValuePair<string, string> kvp in dbinfo)
{
    Console.WriteLine(kvp);
}
' Default case-insentive connection string.
Dim connStringCI As String = "Data Source= Test.sdf; LCID= 1033"

' Set "Case Sensitive" to true to change the collation from CI to CS.
Dim connStringCS As String = "Data Source= Test.sdf; LCID= 1033; Case Sensitive=true"

If File.Exists("Test.sdf") Then
    File.Delete("Test.sdf")
End If

Dim engine As New SqlCeEngine(connStringCI)
' The collation of the database is case insensitive.
engine.CreateDatabase()

' The collation of the database will be case sensitive because of 
' the new connection string used by the Compact method.
engine.Compact(connStringCS)

Dim conn As SqlCeConnection = Nothing
conn = New SqlCeConnection(connStringCS)
conn.Open()

'Retrieve the connection string information - notice the 'Case Sensitive' value.
Dim dbinfo As List(Of KeyValuePair(Of String, String)) = conn.GetDatabaseInfo

Console.WriteLine(vbNewLine & "GetDatabaseInfo() results:")

Dim kvp As KeyValuePair(Of String, String)
For Each kvp In dbinfo
    Console.WriteLine(kvp)
Next

Vedere anche

Altre risorse

Gestione di database (SQL Server Compact)

Attività comuni correlate ai database (SQL Server Compact)