我将我的应用程序数据库作为.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也有同感。
答案 0 :(得分:1)
这是一个noob错误。解决方案很简单:
await liveClient.DownloadAsync(file.FileID + "/content");
非常确定它也适用于DownloadBackgroundAsync。
我错过了/content
。认为fileID就足够了,Live SDK API知道该怎么做,在下载文件时(不只是获取属性)下载流几乎是空的。当我再次将文件直接上传到OneDrive并发现它只有2KB大时,发现了这一点。