Как использовать базу данных SQLite с Windows Phone 7? - PullRequest
3 голосов
/ 03 декабря 2010

Я занимаюсь разработкой приложения для windows phone 7.Я новичок в приложении Windows Phone 7.Я новичок в методе Application.GetResourceStream ().Я использую следующую ссылку в своем приложении.

http://wirebear.com/blog/2010/11/12/using-sqlite-in-your-wp7-app

Я следую инструкциям, описанным в приведенной выше ссылке.Я столкнулся с проблемой в методе Application.GetResourceStream ().В приведенном выше методе я использую следующий код

Stream src = Application.GetResourceStream(
                 new Uri(@"/SQLiteConnectivity;component/" + dbName,
                     UriKind.Relative)).Stream;

Я щелкнул правой кнопкой мыши имя моего проекта, выбрал свойства и нашел имя сборки как «SQLiteConnectivity».После запуска приложения я получаю ошибку исключения нулевой ссылки в Application.GetResourceStream ().Я также не знаю, что я должен использовать вместо «компонента» в методе Application.GetResourceStream ().Можете ли вы предоставить мне какой-либо код или ссылку или какое-либо решение, с помощью которого я могу решить вышеуказанную проблему?

Да, я получил ответ, как описано в разделе ответов.Я решил вышеуказанную проблему, установив «Действие сборки» в свойствах моей базы данных как «Ресурс» и «Копировать в выходной каталог» как «Копировать всегда».Но теперь я сталкиваюсь с новой проблемой

Я объявил следующий код в моем app.xaml.cs

public partial class App : Application
{
    public PhoneApplicationFrame RootFrame { get; private set; }

    private DBHelper _db;
    public DBHelper db
    {
        get
        {
            if (_db == null)
                _db = new DBHelper("ExpenseManager.db");
            return _db;
        }
    }
}

и вызываю его в моем mainpage.xaml.cs следующим образом

private void button1_Click(object sender, RoutedEventArgs e)
{                
      // Code runs "for real"

    _customerEntries = (Application.Current as App).db.SelectObservableCollection<Category>("SELECT  Category_Name FROM Category WHERE Category_ID=1");
    textBox1.Text = _customerEntries.ToString();
}

Я добавил один класс ниже класса главной страницы следующим образом

public class Category
{
    public int Category_ID { get; set; }
    public string Category_Name { get; set; }
}

Теперь, когда я запускаю свое приложение, я получаю сообщение об ошибке при нажатии кнопки, поскольку файл зашифрован или нетв базе данных »в следующей функции SQLClient.cs в BindAll (ppStmt);

Sqlite3.Vdbe Prepare()
{
    Sqlite3.Vdbe ppStmt=new Sqlite3.Vdbe();
    if (Sqlite3.sqlite3_prepare_v2(_db, CommandText, CommandText.Length, ref ppStmt, 0) != Sqlite3.SQLITE_OK)
        throw new SQLiteException(Sqlite3.sqlite3_errmsg(_db));
    BindAll(ppStmt); 
    return ppStmt;
}

Не могли бы вы предоставить мне любой код или ссылку, с помощью которых я могу решить вышеуказанную проблему?Если я делаю что-то не так, то, пожалуйста, направь меня.

Ответы [ 2 ]

1 голос
/ 03 декабря 2010

Вы хотите убедиться, что для свойства сборки файла базы данных задано значение resource, и вам нужно проверить значение свойства dbName, чтобы убедиться, что это полное имя файла, включая любую структуру папок.

The dbсвойство приложения должно быть настроено иначе.В файле App.xaml.cs измените эту строку:

public DBHelper db = new DBHelper("DATABASE.s3db");

на эту:

private DBHelper _db;
public DBHelper db
{
  get 
  { 
    if (_db == null)
      _db = new DBHelper("DATABASE.s3db");
    return _db;
  }
}

Обязательно замените DATABASE.s3dbимя файла базы данных, включая структуру папок.

Для ошибки:

'file is encrypted or is not in a database' 

В какой версии SQLite вы создали эту базу данных?Вы должны использовать SQLite версии 3. Если вы используете SQLite3, установлен ли у вас пароль для этой базы данных?

0 голосов
/ 11 апреля 2013

Мы можем использовать как это ...

private void button1_Click(object sender, RoutedEventArgs e)
{                
  // Code runs "for real"


_customerEntries = (Application.Current as App).db.SelectObservableCollection<Category>("SELECT  Category_Name FROM Category WHERE Category_ID=1");
   foreach (Category me in _customerEntries )
     {
         fielddiscription.Add(me.field_description);//add to list
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...