Практическое руководство: сжатие базы данных (программным образом)
В этом разделе вы узнаете о том, как сжать базу данных SQL Server Compact 4.0 с помощью метода Compact объекта SqlServerCe.Engine и с помощью метода Shrink объекта SqlServerCe.Engine. Методы Compact и Shrink несколько различаются в том, как они уменьшают размер базы данных.
Метод Compact служит для высвобождения места в файле базы данных. Его можно также использовать для изменения таких параметров базы данных, как пароль и код локали. При сжатии базы данных создается новый файл базы данных, страницы таблиц реорганизуются так, чтобы они располагались на смежных страницах базы данных, а для высвобождения неиспользуемого места все данные в базе данных переписываются на новые страницы данных.
Метод Shrink также служит для высвобождения места в файле базы данных. Однако метод Shrink нельзя использовать для изменения параметров настройки базы данных, поскольку метод Shrink не создает новый файл базы данных, а лишь реорганизует записи, удаляя пустые.
Кроме того, в этом разделе содержатся сведения об использовании метода Compact для изменения настройки учета регистра в базе данных SQL Server Compact.
Дополнительные сведения о методах Compact и Shrink см. в разделе Обслуживание баз данных (SQL Server Compact). Дополнительные сведения об использовании пространства имен SqlServerCe см. в справочной документации по пространству имен SqlServerCe.
Процедуры SQL Server Compact 4.0
Сжатие базы данных
Создайте объект Engine и передайте в него строку подключения с существующей базой данных, которую требуется сжать.
SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
Вызовите метод Compact. При вызове метода Compact можно также задать новые свойства базы данных, например включить защиту паролем и шифрование.
engine.Compact("Data Source=; Password = <enterStrongPasswordHere>");
Сжатие базы данных
Создайте объект Engine и в строке соединения передайте его в базу данных, которую требуется оптимизировать.
SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
Вызовите метод Shrink.
engine.Shrink();
Изменение учета регистра в сжатой базе данных
Создайте объект Engine и передайте в него строку соединения с существующей базой данных, которую требуется сжать.
SqlCeEngine engine = new SqlCeEngine("Data Source= Test.sdf; LCID= 1049");
Вызовите метод Compact. При вызове метода Compact можно также задать новые свойства базы данных, например учет регистра. Если параметр «Case Sensitive» при вызове метода Compact не указать, значение этого свойства не изменится.
engine.Compact("Data Source= Test.sdf; LCID= 1049; Case Sensitive=true");
Примечание
Учет регистра появился в SQL Server Compact. Дополнительные сведения см. в разделе Работа с параметрами сортировки (SQL Server Compact).
Пример
Приведенный в примере код сжимает существующую базу данных SQL Server Compact и показывает, как должны быть изменены свойства базы данных.
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>")
Приведенный в примере код оптимизирует существующую базу данных SQL Server Compact.
SqlCeEngine engine = new SqlCeEngine("Data Source = AdventureWorks.sdf");
engine.Shrink();
Dim engine As New SqlCeEngine("Data Source = AdventureWorks.sdf")
engine.Shrink()
В следующем примере показано применение метода Compact для изменения свойства учета регистра SQL Server Compact. Затем в данном примере кода вызывается метод GetDatabaseInfo для получения локали, метода шифрования и значения учета регистра, соответствующих этой базе данных.
// Default case-insentive connection string.
string connStringCI = "Data Source= Test.sdf; LCID= 1049";
// Set "Case Sensitive" to true to change the collation from CI to CS.
string connStringCS =
"Data Source= Test.sdf; LCID= 1049; 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= 1049"
' Set "Case Sensitive" to true to change the collation from CI to CS.
Dim connStringCS As String = "Data Source= Test.sdf; LCID= 1049; 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