Cómo compactar una base de datos (mediante programación)

En este tema, aprenderá a compactar una base de datos de SQL Server Compact 4.0 con el método Compact del objeto SqlServerCe.Engine y con el método Shrink del objeto SqlServerCe.Engine. Los métodos Compact y Shrink difieren ligeramente en el modo en que reducen el tamaño de la base de datos.

Puede usar el método Compact para recuperar espacio en el archivo de base de datos. También puede utilizarlo para cambiar la configuración de una base de datos, por ejemplo la contraseña y el id de configuración regional (LCID). Al compactar una base de datos, se crea un nuevo archivo de base de datos, se reorganizan las páginas de tabla para que residan en páginas adyacentes de la base de datos y se recupera el espacio no usado rescribiendo todos los datos de la base de datos en las nuevas páginas de datos.

También puede usar el método Shrink para recuperar espacio en el archivo de base de datos. Sin embargo, el método Shrink no se puede usar para cambiar la configuración de la base de datos, ya que el método Shrink no crea un archivo de base de datos nuevo, sino que simplemente reorganiza los registros y elimina los que están vacíos.

Además, este tema proporciona información sobre cómo utilizar el método Compact para cambiar el valor de distinción de mayúsculas y minúsculas de una base de datos de SQL Server Compact.

Para obtener más información sobre Compact y Shrink, vea Mantener bases de datos (SQL Server Compact). Para obtener más información sobre cómo usar el espacio de nombres SqlServerCe, vea la documentación de referencia sobre el espacio de nombres SqlServerCe.

Procedimientos para SQL Server Compact 4.0

Para compactar una base de datos

  1. Cree un objeto Engine y pase la cadena de conexión a la base de datos existente que desee compactar.

    SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
    
  2. Llame al método Compact. Cuando llame al método Compact, también puede especificar las propiedades de la nueva base de datos, incluida la protección con contraseña o el cifrado.

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

Para reducir una base de datos

  1. Cree un objeto Engine y pase la cadena de conexión a la base de datos que desee reducir.

    SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
    
  2. Llame al método Shrink.

    engine.Shrink();
    

Para cambiar la distinción de mayúsculas y minúsculas de una base de datos compacta

  1. Cree un objeto Engine y pase la cadena de conexión a la base de datos existente que desee compactar.

    SqlCeEngine engine = 
         new SqlCeEngine("Data Source= Test.sdf; LCID= 1033");
    
  2. Llame al método Compact. Al llamar al método Compact, también puede especificar una nueva propiedad de la base de datos, como la distinción de mayúsculas y minúsculas. Si no especifica "Case Sensitive" al llamar al método Compact, no se cambia la configuración de la distinción de mayúsculas y minúsculas.

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

Nota

La distinción de mayúsculas y minúsculas se incluye a partir del lanzamiento de SQL Server Compact Service Pack 1. Para obtener más información, vea Trabajar con intercalaciones (SQL Server Compact).

Ejemplo

En este ejemplo, una base de datos de SQL Server Compact existente se compacta y se indica cómo cambiar las propiedades de base de datos.

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>")

En este ejemplo se reduce una base de datos de 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()

En el ejemplo siguiente se muestra cómo utilizar el método Compact para cambiar la distinción de mayúsculas y minúsculas de una base de datos de SQL Server Compact. A continuación, el ejemplo de código llama al método GetDatabaseInfo para recuperar la configuración regional, el modo de cifrado y el valor de la distinción de mayúsculas y minúsculas de la base de datos.

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

Vea también

Conceptos

Mantener bases de datos (SQL Server Compact)

Tareas comunes de bases de datos (SQL Server Compact)