【发布时间】: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