Procédure : compacter une base de données (par programme)
Dans cette rubrique, vous allez apprendre à compacter une base de données SQL Server Compact 4.0 à l'aide de la méthode Compact de l'objet SqlServerCe.Engine et à l'aide de la méthode Shrink de l'objet SqlServerCe.Engine. Les méthodes Compact et Shrink diffèrent légèrement dans leur manière de réduire la taille de base de données.
La méthode Compact vous permet de récupérer de l'espace dans le fichier de base de données. Vous pouvez également l'utiliser pour modifier des paramètres de base de données tels que le mot de passe et l'ID de paramètres régionaux (LCID). Lorsque vous compactez une base de données, un nouveau fichier de base de données est créé, les pages de tables sont réorganisées de manière à ce qu'elles résident dans des pages de bases de données adjacentes et l'espace inutilisé est récupéré grâce à la réécriture de toutes les données de base de données dans les nouvelles pages de données.
La méthode Shrink vous permet également de récupérer de l'espace dans le fichier de base de données. Toutefois, la méthode Shrink ne permet pas de modifier les paramètres de base de données car elle ne crée pas un nouveau fichier de base de données ; son action se résume à la réorganisation des enregistrements et à la suppression des enregistrements vides.
De plus, cette rubrique fournit des informations sur l'utilisation de la méthode Compact pour modifier le paramètre de respect de la casse d'une base de données SQL Server Compact.
Pour plus d'informations sur les méthodes Compact et Shrink, consultez Maintenance des bases de données (SQL Server Compact). Pour plus d'informations sur l'utilisation de l'espace de noms SqlServerCe, consultez la documentation de référence sur l'espace de noms SqlServerCe.
Procédures pour SQL Server Compact 4.0
Pour compacter une base de données
Créez un objet Engine, puis transmettez-le dans la chaîne de connexion à la base de données existante que vous souhaitez compacter.
SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
Appelez la méthode Compact. Lorsque vous appelez la méthode Compact, vous pouvez également spécifier de nouvelles propriétés de base de données, notamment l'ajout d'une protection par mot de passe ou d'un chiffrement.
engine.Compact("Data Source=; Password = <enterStrongPasswordHere>");
Pour réduire une base de données
Créez un objet Engine, puis transmettez-le à la chaîne de connexion à la base de données que vous souhaitez réduire.
SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
Appelez la méthode Shrink.
engine.Shrink();
Pour modifier le respect de la casse d'une base de données compact
Créez un objet Engine, puis transmettez-le dans la chaîne de connexion à la base de données existante que vous souhaitez compacter.
SqlCeEngine engine = new SqlCeEngine("Data Source= Test.sdf; LCID= 1033");
Appelez la méthode Compact. Lorsque vous appelez la méthode Compact, vous pouvez également spécifier une nouvelle propriété de base de données, telle que le respect de la casse. Si vous ne spécifiez pas « Case Sensitive » lors de l'appel de la méthode Compact, le paramètre de respect de la casse n'est pas modifié.
engine.Compact("Data Source= Test.sdf; LCID= 1033; Case Sensitive=true");
Notes
Le respect de la casse est disponible à compter de la version SQL Server Compact SP1. Pour plus d'informations, consultez Utilisation des classements (SQL Server Compact).
Exemple
Cet exemple illustre comment compacter une base de données SQL Server Compact existante et modifier les propriétés de la base de données.
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>")
Cet exemple illustre la réduction d'une base de données SQL Server Compact existante.
SqlCeEngine engine = new SqlCeEngine("Data Source = AdventureWorks.sdf");
engine.Shrink();
Dim engine As New SqlCeEngine("Data Source = AdventureWorks.sdf")
engine.Shrink()
L'exemple suivant montre comment utiliser la méthode Compact pour modifier le respect de la casse d'une base de données SQL Server Compact. Ensuite, il appelle la méthode GetDatabaseInfo pour extraire les paramètres régionaux, le mode de chiffrement et une valeur de respect de la casse de la base de données.
// 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