2016-06-17 4 views
0

Мне сложно установить соединение с существующим sqlite db в C#. Я хочу сделать это для приложения WPF.sqlite соединение с C# XamlParseException

Это мой код:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Data.SQLite; 
using Finisar.SQLite; 

namespace Ebios_WPF 
{ 

/// <summary> 
/// Logique d'interaction pour MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 

     // We use these three SQLite objects: 
     Finisar.SQLite.SQLiteConnection sqlite_conn; 
     Finisar.SQLite.SQLiteCommand sqlite_cmd; 
     Finisar.SQLite.SQLiteDataReader sqlite_datareader; 

     // create a new database connection: 
     sqlite_conn = new Finisar.SQLite.SQLiteConnection("Data Source=existingDB.db; Version=3;"); 

     // open the connection: 
     sqlite_conn.Open(); 

Когда я поставил существующую БД SQLite в аргументе у меня есть XamlParseException:

sqlite_conn = new Finisar.SQLite.SQLiteConnection("Data Source=existingDB.db; Version=3;"); 

но если я создать новую базу данных она работает:

sqlite_conn = new Finisar.SQLite.SQLiteConnection("Data Source=NewDB.db; Version=3;New=True;"); 

Благодарим за помощь :)

С уважением

ответ

0

У меня была эта проблема (и такое же сообщение об ошибке), и было установлено, что sqlite.interop.dll не был автоматически выведен/скопирован туда, где он должен находиться в главном проекте WPF.

У меня есть проект класса («Репозиторий»), который использует System.Data.Sqlite.Core от Nuget. Когда я создаю этот проект, он выводит его в каталог bin \ Debug \ и создает в каждом из них два подкаталога: «x64» и «x86» с sqlite.interop.dll. Эти каталоги необходимы в основном проекте (WPF), но там не перемещаются в сборке. Итак, чтобы управлять этим, я вручную создал папку x64 и x86 в каталогах bin Debug и Release основного WPF и скопировал файл sqlite.interop.dll. Я добавил это к моей пост-сборке, как это (сначала создайте папки x64 и x86). «Репозиторий» - это название моего проекта, в котором был установлен пакет Sqlite Nuget.

copy "$(ProjectDir)Repository\bin\$(ConfigurationName)\x64\*.*" "$(ProjectDir)\bin\$(ConfigurationName)\x64\" /Y 
copy "$(ProjectDir)Repository\bin\$(ConfigurationName)\x86\*.*" "$(ProjectDir)\bin\$(ConfigurationName)\x86\" /Y 

Я был в состоянии решить эту проблему в Visual Studio, но когда я пошел, чтобы выпустить программное обеспечение и создать .msi, я забыл о каталогах и должен был также создать их для моих .msi.

Я не пробовал, но, возможно, вы можете просто установить пакет Sqlite Nuget в свой проект WPF.

+0

Спасибо, это работает: – micka777

Смежные вопросы