2

私は初心者プログラマーです。Windows Phone mango アプリにデータベース ファイル (MyDatabase.sdf) があります。私が達成しようとしているのは、MyDatabase.sdf ファイルを MyDatabaseBackup.txt として分離ストレージにコピーして変換し、バックアップとしてスカイドライブにアップロードすることです。skydrive は .sdf ファイルのアップロードをサポートしていないため、一部の人々はこの変換方法を提案し、それを機能させました。同じことをしようとしていますが、.sdf ファイルを分離ストレージの .txt ファイルにコピーできません。これが私のコードです...

//START BACKUP
    private void Backup_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 you want to backup? This will overwrite your old backup file!", "Backup?", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
                UploadFile();
        }
    }

    public void UploadFile()
    {
        if (skyDriveFolderID != string.Empty) //the folder must exist, it should have already been created
        {
            this.client.UploadCompleted
                += new EventHandler<LiveOperationCompletedEventArgs>(ISFile_UploadCompleted);

            infoTextBlock.Text = "Uploading backup...";
            dateTextBlock.Text = "";

            using (AppDataContext appDB = new AppDataContext(AppDataContext.DBConnectionString))
            {
                appDB.Dispose();
            }

            try
            {
                using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (myIsolatedStorage.FileExists("MyDatabase.sdf"))
                    {
                        myIsolatedStorage.CopyFile("MyDatabase.sdf", "MyDatabaseBackup.txt"); //This is where it goes to the catch statement.
                    }

                    this.client.UploadAsync(skyDriveFolderID, fileName, true, readStream , null);
                }
            }

            catch
            {
                MessageBox.Show("Error accessing IsolatedStorage. Please close the app and re-open it, and then try backing up again!", "Backup Failed", MessageBoxButton.OK);
                infoTextBlock.Text = "Error. Close the app and start again.";
                dateTextBlock.Text = "";
            }
        }
    }

    private void ISFile_UploadCompleted(object sender, LiveOperationCompletedEventArgs args)
    {
        if (args.Error == null)
        {
            infoTextBlock.Text = "Backup complete.";

            dateTextBlock.Text = "Checking for new backup...";

            //get the newly created fileID's (it will update the time too, and enable restoring)
            client = new LiveConnectClient(session);
            client.GetCompleted += new EventHandler<LiveOperationCompletedEventArgs>(getFiles_GetCompleted);
            client.GetAsync(skyDriveFolderID + "/files");
        }
        else
        {
            this.infoTextBlock.Text =
                "Error uploading file: " + args.Error.ToString();
        }
    }

app.xaml.cs ファイルでデータベースを作成する方法を次に示します。

// Specify the local database connection string.
        string DBConnectionString = "Data Source=isostore:/MyDatabase.sdf";

        // Create the database if it does not exist.
        using (AppDataContext appDB = new AppDataContext(AppDataContext.DBConnectionString))
        {
            if (appDB.DatabaseExists() == false)
            {
                //Create the database
                appDB.CreateDatabase();

                appDB.SubmitChanges();
            }
        }

「sdf ファイルを開いているプロセス/関数/スレッドがない」ことを確認することを提案する人もいます。UploadFile() メソッドでそれを試みましたが、正しく実行したかどうかは完全にはわかりません。

誰かがこれらの 2 つの問題についてコードのヘルプを教えてください。助けてくれてありがとう!

4

1 に答える 1

0

まず、以下に示すように File.Copy メソッドを使用してローカル コピーを作成し、.txt ファイルをアップロードします。

File.Copy (Path.Combine ([DbFileDir], MyDatabase.sdf), Path.Combine ([SomeLocalDir], MyDatabaseBackup.txt), true)

注: 元の/新しいローカル フォルダーへの適切なアクセス権が必要です。これが役立つことを願っています。Rgds、

于 2014-06-21T18:01:34.640 に答える