Como compactar um banco de dados (programaticamente)
Neste tópico, você aprenderá como compactar um banco de dados SQL Server Compact 4.0 usando o método Compact do objeto SqlServerCe.Engine e usando o método Shrink do objeto SqlServerCe.Engine. Os métodos Compact e Shrink apresentam uma ligeira diferença quanto à redução do tamanho do banco de dados.
Use o método Compact para recuperar espaço no arquivo de banco de dados. Você também pode usá-lo para alterar as configurações do banco de dados, como a senha e o LCID (identificação de localidade). Ao compactar um banco de dados, será criado um novo arquivo de banco de dados, as páginas de tabela serão reorganizadas de forma a residirem em páginas adjacentes do banco de dados e o espaço não utilizado será recuperado gravando novamente todos os dados do banco de dados nas novas páginas de dados.
Você também pode usar o método Shrink para recuperar espaço no arquivo de banco de dados. Contudo, o método Shrink não pode ser usado para alterar as configurações do banco de dados, pois o método Shrink não cria um novo arquivo de banco de dados; ele apenas reorganiza os registros e exclui registros vazios.
Além disso, este tópico fornece informações sobre como usar o método Compact para alterar a configuração de diferenciação de maiúsculas e minúsculas de um banco de dados do SQL Server Compact.
Para obter mais informações sobre Compact e Shrink, consulte Mantendo bancos de dados (SQL Server Compact). Para obter mais informações sobre como usar o namespace SqlServerCe, consulte a documentação de referência de namespaces do SqlServerCe.
Procedimentos do SQL Server Compact 4.0
Para compactar um banco de dados
Crie um objeto Engine e passe a cadeia de conexão para o banco de dados existente que deseja compactar.
SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
Chame o método Compact. Ao chamar o método Compact, você também pode especificar novas propriedades do banco de dados, incluindo a adição de proteção por senha ou criptografia.
engine.Compact("Data Source=; Password = <enterStrongPasswordHere>");
Para reduzir um banco de dados
Crie um objeto Engine e passe a cadeia de conexão para o banco de dados que deseja reduzir.
SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
Chame o método Shrink.
engine.Shrink();
Para alterar a diferenciação de maiúsculas e minúsculas de um banco de dados compacto
Crie um objeto Engine e passe a cadeia de conexão para o banco de dados existente que deseja compactar.
SqlCeEngine engine = new SqlCeEngine("Data Source= Test.sdf; LCID= 1033");
Chame o método Compact. Ao chamar o método Compact, você também pode especificar uma nova propriedade do banco de dados, como a diferenciação de maiúsculas e minúsculas. Se não especificar "Diferenciação de maiúsculas e minúsculas" ao chamar o método Compacto, essa configuração não será alterada.
engine.Compact("Data Source= Test.sdf; LCID= 1033; Case Sensitive=true");
Dica
A diferenciação de maiúsculas e minúsculas é introduzida a partir do SQL Server Compact versão SP1. Para obter mais informações, consulte Trabalhando com agrupamentos (SQL Server Compact).
Exemplo
Este exemplo compacta um banco de dados do SQL Server Compact existente e mostra como alterar as propriedades do banco de dados.
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>")
Este exemplo reduz um banco de dados do SQL Server Compact existente.
SqlCeEngine engine = new SqlCeEngine("Data Source = AdventureWorks.sdf");
engine.Shrink();
Dim engine As New SqlCeEngine("Data Source = AdventureWorks.sdf")
engine.Shrink()
O exemplo a seguir demonstra como usar o método Compact para alterar a diferenciação de maiúsculas e minúsculas de um banco de dados do SQL Server Compact. Depois, o exemplo de código chama o método GetDatabaseInfo para recuperar a localidade, o modo de criptografia e o valor de diferenciação de maiúsculas e minúsculas do banco de dados.
// 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