【问题标题】:Local database "no format for SQL server Compact" after OneDrive download of .sdf fileOneDrive 下载 .sdf 文件后,本地数据库“无 SQL server Compact 格式”
【发布时间】:2014-09-15 21:40:02
【问题描述】:

我将我的应用程序数据库作为 .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 数据库文件格式 [ 数据库名称 = C:\Data\Users\DefApps\APPDATA\Local\Packages\xxx.TimecardApp_evtaxn4jfh7hw\LocalState\downloadedDatabase.sdf ]

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

【问题讨论】:

  • 把备份文件改成database.bak文件会更好吗?
  • 你能做一个文件比较来检查二进制内容是否改变吗?
  • 隔离存储中的sdf文件和onedrive之间?会做,但不是现在。我现在在上班。
  • 我现在能做的就是用 MS SQL 管理 2008 检查上传到 OneDrive 的 sdf 文件,可以说文件没有损坏。我可以查询它并提供正确的数据。莫非,上面文件的下载还没有真正完成?虽然BackgroundDownload方法完成了?
  • 是的,当然,它只会启动一个后台操作并返回。 msdn.microsoft.com/en-us/library/jj219338.aspx

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


【解决方案1】:

这是一个菜鸟的错误。解决方法很简单:

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

很确定它也适用于 DownloadBackgroundAsync。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 2011-05-03
    相关资源
    最近更新 更多