2016-09-22 9 views
0

PCLのXamarin.Forms用にNUGetパッケージをインストールしました。 Droid、iOS、Win 8.1、WinPhone 8.1の4つのプロジェクトがあります。私のデータベースに接続しようとしましたが、問題が発生しました。私のWinとWinPhoneプロジェクトはそれを見たり、間違ったパスを返したりしません。公式のXamarin.Formsフォーラムに続きました。WinPhone上のSQLiteDB(またはコピー)へのパスが正しくありません。 Xamarin.Forms PCL

インタフェース:

public interface ISQLite 
{ 
    string GetDatabasePath(string filename); 
} 

WInPhoneクラス:

using System.IO; 
using Windows.Storage; 
using Baumizer.WinPhone; 
using Xamarin.Forms; 

[assembly: Dependency(typeof(SQLite_WinPhone))] 
namespace Baumizer.WinPhone 
{ 
    public class SQLite_WinPhone:ISQLite 
{ 
    public SQLite_WinPhone() { } 
    public string GetDatabasePath(string filename) 
    { 
     return Path.Combine(ApplicationData.Current.LocalFolder.Path, filename); 
    } 
}} 

情報を選択するためのこのクラス:

public class DataBase 
{ 
    SQLiteConnection connection; 

    public DataBase() 
    { 
     connection= new SQLiteConnection(DependencyService.Get<ISQLite>().GetDatabasePath("Database.db")); 
    } 

    public IEnumerable<Group> GetGroups() 
    { 
     return connection.Query<Group>("SELECT * FROM [Scedule] WHERE [facultyName] =" + "'" + Data.CurrentFaculty + "'"); 
    } 
} 

これは、Android上でうまく動作します。 WinPhoneではSQLiteの例外を受け取ります - このようなテーブルはありません:Scedule。私はエミュレータのローカルディレクトリを開きます。ここでdbは0Kbです。 私はdbをに、資産はとし、BuildInActionをからに変更しました。に設定しました。何が間違っている?

if(await ApplicationData.Current.LocalFolder.GetItemAsync(Data.DataBaseName) == null) 
     { 
      StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync($"Assets\\{Data.DataBaseName}"); 
      await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder); 
     } 

それをコピーDBが存在していないが、それがある場合:WinPhone App.csにOnLaunched (...)にパット、このコードを見つけるフォーラムで

+0

テーブルをどこかに作成していますか?それとも既存のデータベースですか? –

+0

既存のデータベースです –

答えて

0

を助ける必要があります。 DBを削除する必要があります0Kb、しかし私はこれを行う方法がわかりません。

それは)(OnLaunched、仕事だ:

try 
     { 
      await ApplicationData.Current.LocalFolder.GetItemAsync("Scedule.db"); 
     } 
     catch (System.IO.FileNotFoundException) 
     { 
      StorageFile databaseFile = 
        await Package.Current.InstalledLocation.GetFileAsync($"Assets\\{"Scedule.db"}"); 
      await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder); 
     } 

DBをuncorrectlyコピーされました。別の方法があるかもしれません。

関連する問題