OneDrive下载.sdf文件后,本地数据库“没有SQL Server Compact的格式”

时间:2014-09-15 21:40:03

标签: c# sql sql-server-ce windows-phone-8.1

我将我的应用程序数据库作为.SDF文件上传到OneDrive,其中包含以下行:

iso.CopyFile(AppResources.DatabaseName + ".sdf", "/shared/transfers/" + databaseBackupname + ".sdf");

LiveConnectClient liveClient = new LiveConnectClient(oneDriveAuthClient.Session);

try
{
   LiveOperationResult uploadResult = await liveClient.BackgroundUploadAsync(oneDriveFolderId, new Uri("/shared/transfers/" + databaseBackupname + ".sdf", UriKind.RelativeOrAbsolute), OverwriteOption.Overwrite);

在此之后,我可以使用以下代码成功下载此文件:

string tmpPathDatabase = "\\shared\\transfers\\downloadedDatabase.sdf";
LiveOperationResult downloadResult = await liveClient.BackgroundDownloadAsync(file.FileID, new Uri(tmpPathDatabase, UriKind.RelativeOrAbsolute));

在我尝试将该文件用作数据库之前,一切正常。但是,当我尝试在此代码中使用该文件时:

string tmpDBConnectionString = "Data Source=isostore:" + tmpPathDatabase;

using (DBClass tmpDB = new DBClass(tmpDBConnectionString))
{
    if (tmpDB.DatabaseExists() == true)
    {
        DatabaseSchemaUpdater dbNewUpdater = tmpDB.CreateDatabaseSchemaUpdater();

创建DatabaseSchemaUpdater时收到错误消息:

  

正在引用的文件不是SQL Server Compact数据库文件格式   [Databasename = C:\ Data \ Users \ DefApps \ APPDATA \ Local \ Packages \ xxx.TimecardApp_evtaxn4jfh7hw \ LocalState \ downloadedDatabase.sdf]

上传还是下载会改变文件的编码?因为当我只是复制IsolatedStorage中的文件时,我可以将它们用作数据库而无需任何更改。我对使用OneDrive也有同感。

1 个答案:

答案 0 :(得分:1)

这是一个noob错误。解决方案很简单:

await liveClient.DownloadAsync(file.FileID + "/content");

非常确定它也适用于DownloadBackgroundAsync。

我错过了/content。认为fileID就足够了,Live SDK API知道该怎么做,在下载文件时(不只是获取属性)下载流几乎是空的。当我再次将文件直接上传到OneDrive并发现它只有2KB大时,发现了这一点。