2014-05-07 12 views
5

Próbowałem utworzyć telefon z systemem Windows i chciałbym użyć SQLite do przechowywania moich danych i nauki korzystania z nich w aplikacjach Windows Phone. W tym celu używam "SQLite.Net-PCL", ale wciąż otrzymuję wyjątek od pliku. Ten kod pisałem:SQLite.Net-PCL Połączenie nie znajduje DB

 String ConnectionString = Path.Combine(ApplicationData.Current.LocalFolder.Path, Connection); 
     if (File.Exists(ConnectionString)) 
     { 
      SQLite.Net.Platform.WindowsPhone8.SQLitePlatformWP8 e = new SQLite.Net.Platform.WindowsPhone8.SQLitePlatformWP8(); 
      Con = new SQLiteConnection(e,ConnectionString); 
     } 

     else { 
      SQLite.Net.Platform.WindowsPhone8.SQLitePlatformWP8 e = new SQLite.Net.Platform.WindowsPhone8.SQLitePlatformWP8(); 
      File.Create(ConnectionString); 
      Con = new SQLiteConnection(e, ConnectionString);    
     } 

Myślałem, że może mi się ten błąd, bo ręcznie utworzyć pusty plik, ale jeśli to jest problem, w jaki sposób można stworzyć DB nie istnieje w przypadku bazy danych w telefonie ?

+0

Jaka jest wartość ConnectionString, nie jest to oczywiste z Twojego kodu? – Gavin

Odpowiedz

0

Nie musisz tworzyć pliku samodzielnie, ponieważ konstruktor SQLiteConnection zarządza nim za Ciebie.

public SQLiteConnection(ISQLitePlatform sqlitePlatform, string databasePath, bool storeDateTimeAsTicks = false, IBlobSerializer serializer = null) 
    : this(
     sqlitePlatform, databasePath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create, storeDateTimeAsTicks, serializer) 
{ 
} 

Powinieneś po prostu otworzyć połączenie, utworzyć tabele i to powinno być to.

class ExampleDataContext 
{ 
    public const string DATABASE_NAME = "data.sqlite"; 
    private SQLiteConnection connection; 

    public TableQuery<Foo> FooTable { get; private set; } 
    public TableQuery<Bar> BarTable { get; private set; } 

    public ExampleDataContext() 
    { 
     connection = new SQLiteConnection(new SQLitePlatformWinRT(), Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, DATABASE_NAME)); 

     Initialize(); 

     FooTable  = connection.Table<Foo>(); 
     BarTable  = connection.Table<Bar>(); 
    } 

    private void Initialize() 
    { 
     connection.CreateTable<Foo>(); 
     connection.CreateTable<Bar>(); 
    } 
} 

nie martw się o tym Initialize, stoły dostać utworzona tylko wtedy, gdy nie są one tam jeszcze.

+0

Czy SQLitePlatformWinRT() obsługuje WP8.1? Jeśli tak, gdzie to jest? Jeśli nie, to gdzie jest platforma dla WP8.1? –

+1

@JohnCroneh Myślę, że nie był on domyślnie włączony w momencie pisania. Pobrałem źródło i ręcznie dodałem cel budowania. –

+0

Dzięki za odpowiedź. Gdzie dokładnie jest źródło? –

Powiązane problemy