2017-01-02 28 views
2

Also ich bin neu in UWP, nach dem Ende der Verbindung zu SQLite tutorial, ich bastelte mit dem Code ein bisschen, um neue Dinge auszuprobieren. Anstatt sqlite Datei im lokalen Ordner zu erstellen und zu speichern, ändere ich das Dateiverzeichnis in den Installationsort, ich habe einen Ordner "data" erstellt und sqlite Datei darin hinzugefügt. An diesem Punkt können Sie herausfinden, in welches Problem ich hineingeraten bin. Ich kann nur Tabelle lesen/auswählen, aber kann Datensätze in Datenbanken nicht schreiben/einfügen, löschen oder aktualisieren. Ich erwarte diese Probleme und ich kenne Gründe dafür. Was ich wissen will ist:Wie schreibe ich in eine readonly sqlite Datei in UWP

  • Kann ich die readonly SQLite-Datei in den installierten Speicherort lesen und schreiben? Kann mir bitte den Weg zeigen.
  • Ist es praktisch oder eine gute Idee, die Datenbankdatei im Installationsverzeichnis zu speichern? Oder besser im lokalen Ordner behalten.

Here're mein Code:

Für die MainPage.xaml

<GridView x:Name="gridView" BorderBrush="Blue" BorderThickness="2" HorizontalAlignment="Left" Margin="34,401,0,0" VerticalAlignment="Top" Height="287" Width="1219"> 
     <GridView.ItemTemplate> 
      <DataTemplate x:DataType="data:Test" x:Name="templateGrid"> 
       <StackPanel x:Name="stackPanel" Orientation="Vertical" HorizontalAlignment="Center"> 
        <StackPanel x:Name="stack2" Margin="20,20,0,0"> 
         <TextBlock FontSize="18" Text="{x:Bind ID}" HorizontalAlignment="Center"></TextBlock> 
         <TextBlock FontSize="10" Text="{x:Bind Name}" HorizontalAlignment="Center"></TextBlock> 
        </StackPanel> 
       </StackPanel> 
      </DataTemplate> 
     </GridView.ItemTemplate> 
    </GridView> 
    <TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="10,112,0,0" TextWrapping="Wrap" Text="Name" FontSize="25" VerticalAlignment="Top"/> 
    <TextBox x:Name="textBox" HorizontalAlignment="Left" Margin="132,112,0,0" FontSize="25" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="328"/> 
    <Button x:Name="button2" Content="Add" Click="button2_Click" HorizontalAlignment="Left" Margin="516,125,0,0" VerticalAlignment="Top"/> 

Für Code hinter:

SQLite.Net.SQLiteConnection conn; 
    public MainPage() 
    { 
     this.InitializeComponent(); 
     string path = Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, "data", "librarydatatbase.db"); 
     conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path); 
     List<Test> Records = conn.Query<Test>(@"select * from Test"); 
     gridView.ItemsSource = Records; 
    } 

    private void button2_Click(object sender, RoutedEventArgs e) 
    { 
     conn.Execute("insert into Test (Name) values (?)", textBox.Text.ToString()); 
     List<Test> Records = conn.Query<Test>(@"select * from Test"); 
     gridView.ItemsSource = Records; 
    } 

für SQLite:

create table Test 
(
ID integer primary key autoincrement, 
Name nvarchar(25) 
); 

insert into Test (Name) values ("Test value 1") 

Der Fehler, den ich erhielt:

An exception of type 'SQLite.Net.SQLiteException' occurred in SQLite.Net.dll but was not handled in user code 

Additional information: ReadOnly 

Vielen Dank im Voraus.

Antwort

1

Das Installationsverzeichnis der App ist schreibgeschützt (siehe File access permissions). Es ist für Anwendungscode und Assets.

Wenn Sie Schreibzugriff auf Ihre Datenbank benötigen, können Sie sie nicht in das Installationsverzeichnis der App einfügen.

+0

Danke für die Antwort. Aber ich weiß das schon, ich frage mich nur, ob es ein Trick oder ein Weg für dieses Problem für die Datenbankdatei gibt. – Dant

+1

Nein, gibt es nicht –

+1

@Dant: Sicherheit wird nicht durch Sperren der Tür implementiert, aber einen Schlüssel unter der Türmatte verlassen. Wenn Sie eine Lese-/Schreib-Datenbank benötigen, speichern Sie sie an einem Ort, an dem Sie Lese-/Schreibzugriff haben. Ich weiß nicht, ob das ein Trick ist. – IInspectable

Verwandte Themen