Использование Vici Cool Storage с монодроидом - PullRequest
2 голосов
/ 02 сентября 2011

Эй, на данный момент я не уверен, насколько официально это поддерживается, но были сообщения о людях, успешно использующих monodroid с vici coolStorage. Мне удалось добавить сборки в мой проект и, тем не менее, некоторые классы выдают ошибки времени компиляции, когда я пытаюсь их использовать. особенно при попытке подключения, как в примере для monoTouch на веб-сайте . .


string dbName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "mydb.db3");

// The following line will tell CoolStorage where the database is,
// create it if it does not exist, and call a delegate which
// creates the necessary tables (only if the database file was
// created new)

CSConfig.SetDB(dbName, true, () => {
   CSDatabase.ExecuteNonQuery(@"CREATE TABLE person 
                                 (PersonID INTEGER PRIMARY KEY AUTOINCREMENT,
                                  Name TEXT(50) NOT NULL,
                                  DateOfBirth TEXT(30) NULL)");

});

Я не получаю intellisense при попытке использовать Методы CSConfig, и когда я пытаюсь передать 3 аргумента в CSConfig.SetDB (), я получаю неверное число ошибок args.

Ответы [ 2 ]

4 голосов
/ 07 сентября 2011

Я думаю, что их образец глючит. Если вы используете браузер сборки Visual Studio или браузер сборки MonoDevelop, или даже просто monop -r:Vici.CoolStorage.MT.dll Vici.CoolStorage.CSConfig, вы увидите эти перегрузки для SetDB:

public static void SetDB (CSDataProvider db);
public static void SetDB (CSDataProvider db, string contextName);
public static void SetDB (string dbName);
public static void SetDB (string dbName, Action creationDelegate);
public static void SetDB (string dbName, SqliteOption sqliteOption);
public static void SetDB (string dbName, SqliteOption sqliteOption, Action creationDelegate);

Ни один из них не принимает bool в качестве второго параметра, поэтому я думаю, что их sample содержит ошибки.

Исправление заключается в том, чтобы сделать, как говорит компилятор, и использовать реально существующую перегрузку:

CSConfig.SetDB(dbName, () => {
    CSDatabase.ExecuteNonQuery(
        @"CREATE TABLE person 
        (PersonID INTEGER PRIMARY KEY AUTOINCREMENT,
         Name TEXT(50) NOT NULL,
         DateOfBirth TEXT(30) NULL)");
});
0 голосов
/ 07 сентября 2011

Хорошо, вот сделка. Пример неверный и, видимо, проект с открытым исходным кодом.

Так что в последней версии. нет перегрузки для bool. Смотрите исходный фрагмент.



using System;
using System.IO;
using Mono.Data.Sqlite;

namespace Vici.CoolStorage
{
    [Flags]
    public enum SqliteOption
    {
        None = 0,
        CreateIfNotExists = 1,
        UseConnectionPooling = 2
    }

    public static partial class CSConfig
    {
        public static void SetDB(string dbName)
        {
            SetDB(dbName,SqliteOption.UseConnectionPooling);
        }

        public static void SetDB(string dbName, Action creationDelegate)
        {
            SetDB(dbName,SqliteOption.UseConnectionPooling|SqliteOption.CreateIfNotExists, creationDelegate);
        }

        public static void SetDB(string dbName, SqliteOption sqliteOption)
        {
            SetDB(dbName,sqliteOption,null);
        }

        public static void SetDB(string dbName, SqliteOption sqliteOption, Action creationDelegate)
        {
            bool exists = File.Exists(dbName);
            bool createIfNotExists = (sqliteOption & SqliteOption.CreateIfNotExists) != 0;
            bool usePooling = (sqliteOption & SqliteOption.UseConnectionPooling) != 0;

            if (!exists && createIfNotExists)
            SqliteConnection.CreateFile(dbName);

            SetDB(new CSDataProviderSQLite("Data Source=" + dbName + ";Pooling=" + usePooling), DEFAULT_CONTEXTNAME);

            if (!exists && createIfNotExists && creationDelegate != null)
                creationDelegate();
        }
    }
}

...