Как сохранить базу данных SQL CE на существующем устройстве DataOn, пока не установлено приложение для Windows Mobile? - PullRequest
0 голосов
/ 26 декабря 2011

У меня есть приложение для Windows Mobile 6. Когда на сервере доступно новое исправление, оно загрузит файл New Cab и установит программу на устройство с указанным ниже кодом

.
Process proc = Process.Start("wceload.exe", "\"" + Path.Combine(applicationPath, updateFileName) + "\"");
  proc.WaitForExit();

Но это также удаляет существующую базу данных [Sql CE] и ценные данные.

Мне нужно оставить устройство Database On на устройстве, удалить приложение и установить новый файл cab, где нет необходимости снова устанавливать Fresh DB вместе с установкой NEW cab ...

Как мне достичь этого ... помогите мне в этом ????

Ответы [ 2 ]

1 голос
/ 26 декабря 2011

Перед удалением сделайте резервную копию файла базы данных (обычно .sdf). После установки замените новый файл базы данных резервной копией.

// backup the CE database
string databasePath = ""; // location of your database
string backupPath = ""; // choose a backup path
try
{
    File.Copy(databasePath, backupPath);
}
catch 
{
    Trace.TraceError("Error creating backup");
}


Process proc = Process.Start("wceload.exe", "\"" + Path.Combine(applicationPath, updateFileName) + "\"");
proc.WaitForExit();

Затем, после переустановки, удалите новую базу данных CE и восстановите резервную копию:

if (File.Exists(databasePath))
{
    try 
    {
         File.Delete(databasePath);
    }
    catch 
    {
         Trace.TraceError("Error deleting new database");
    }
}

string databasePath = ""; // location of your database
string backupPath = ""; // choose a backup path
try
{
    File.Copy(backupPath , databasePath);
}
catch 
{
    Trace.TraceError("Error restoring backup");
}

Если вы не можете удалить новую базу данных, потому что она используется, вам нужно придумать механизм, чтобы обойти это (например, переименовать новую базу данных, затем скопировать резервную копию, а затем перезагрузить вашу приложение / устройство)

0 голосов
/ 26 декабря 2011

Код digginforfire позволит вам предотвратить удаление этой базы данных.

Лично я думаю, что лучше написать код, который гарантирует, что в этом нет необходимости. Например, ваше приложение должно проверить наличие базы данных в папке Application Data, прежде чем оно попытается загрузить ее. Если базы данных там нет, вы просто создаете ее.

При копировании и изменении версии примера Microsoft найдено >> ЗДЕСЬ << </a>, вы получите что-то вроде этого:

string appPath = string.Format(@"{0}{1}{2}{1}{3}",
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
    Path.DirectorySeparatorChar, "MyCompany", "MyProduct"
  );

string dbFile = "database.swf";
string dbFilePath = Path.Combine(appPath, dbFile);
if (!File.Exists(dbFilePath)) {
  string connStr = string.Format("Data Source={0}; Password ={1}", dbFilePath, "1234567");
  using (SqlCeEngine engine = new SqlCeEngine(connStr)) {
    engine.CreateDatabase();
  }
  using (SqlCeConnection conn = new SqlCeConnection(connStr)) {
    try {
      conn.Open();
      using (SqlCeCommand cmd = new SqlCeCommand("CREATE TABLE myTable (col1 int, col2 ntext)", conn)) {
        cmd.ExecuteNonQuery();
      }
    } catch { } finally {
      conn.Close();
    }
  }
}

Это обеспечит сохранение базы данных после удаления вашего продукта.

...