2013-09-18 6 views
0

Я использую Microsoft Live API для загрузки & загрузки базы данных. но после загрузки или загрузки, если я пытался получить доступ к базе данных, в любом случае мое приложение дает SqlCeException Unhandled & выходов. Если я перезапустить приложение перед доступом к базе данных не дает каких-либо ошибок, поэтому сейчас решениеSqlCeException в Windows Phone 7

Перезапустите приложение

Это мой код

IsolatedStorageFileStream fileStream = null; 

    private void Upload_Click(object sender, RoutedEventArgs e) 
    { 
     if (client == null || client.Session == null) 
     { 
      MessageBox.Show("You Must Sign In First."); 
     } 
     else 
     { 
      if (MessageBox.Show("Are You Sure? This Will Overwrite Your Old Backup File!", "Backup?", MessageBoxButton.OKCancel) == MessageBoxResult.OK) 
      { 
       UploadDatabase(); 
      } 
     } 
    } 

    public void UploadDatabase() 
    { 
     if (SDFolderID != string.Empty) 
     { 
      WLInfo.Text = "Uploading Backup..."; 

      this.client.UploadCompleted += new EventHandler<LiveOperationCompletedEventArgs>(ISFile_UploadCompleted); 

      try 
      { 
       using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication()) 
       { 
        fileStream = store.OpenFile("DB.sdf", FileMode.Open, FileAccess.Read); 
        client.UploadAsync(SDFolderID, "DB.sdf", fileStream, OverwriteOption.Overwrite); 
        WLInfo.Text = "Upload Complete."; 
       } 
      } 
      catch 
      { 
       WLInfo.Text = "Error: Restart Application."; 
      } 
     } 
    } 

    private void ISFile_UploadCompleted(object sender, LiveOperationCompletedEventArgs args) 
    { 
     if (args.Error == null) 
     { 
      client = new LiveConnectClient(session); 
      client.GetCompleted += new EventHandler<LiveOperationCompletedEventArgs>(GetFiles_GetCompleted); 
      client.GetAsync(SDFolderID + "/files"); 
     } 
     else 
     { 
      this.WLInfo.Text = "Error Uploading Backup File."; 
     } 
     fileStream.Close(); 
    } 

    void GetFiles_GetCompleted(object sender, LiveOperationCompletedEventArgs e) 
    { 
     List<object> data = (List<object>)e.Result["data"]; 

     foreach (IDictionary<string, object> content in data) 
     { 
      if (((string)content["name"]).Equals(FileName)) 
      { 
       FileID = (string)content["id"]; 
      } 
     } 

     if (FileID != null) 
     { 
      WLInfo.Text = "Backup Found On Sky Drive."; 
     } 
     else 
     { 
      WLInfo.Text = "Backup Not Found On Sky Drive."; 
     } 
    } 

ответ

0

Я предполагаю, что это, вероятно, потока не должным образом закрыты, поэтому файл базы данных по-прежнему заблокирован. Когда вы загружаете или загружаете файл базы данных, убедитесь, что вы используете инструкцию using для всего одноразового объекта, чтобы автоматически отрегулировать весь поток.

В вашем файле кодаStream не используется, что, вероятно, является причиной проблемы (вы должны «сохранить» эту переменную в локальном файле и вывести на него в ISFile_UploadCompleted).

Кроме того, когда при использовании using нет необходимости вызывать не выбрасывайте на объекте (нет необходимости иметь store.Dispose();, это делается автоматически, когда вы выходите из используя рамки)

+0

эй я загрузил весь код – xSHERU

+0

thx давайте попробуем его – xSHERU

+0

нет его по-прежнему той же ошибки – xSHERU