嘿,目前我不确定它是如何正式支持的,但是,有报道称人们成功使用monodroid与vici coolStorage。 我已经能够将程序集放入我的项目并编译,但是当我尝试使用它们时,某些类会抛出编译时错误。特别是当试图像website.上的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)");
});
尝试使用时,我没有智能感知 CSConfig的方法,当我尝试将3个args传递给CSConfig.SetDB()时,我得到一个无效的args错误数。
答案 0 :(得分:4)
我认为他们的样本是错误的。如果您使用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)");
});
答案 1 :(得分:0)
好的,这是交易。这个例子是错误的,显然该项目是开源的。
所以在最新版本中。布尔没有过载。 请参阅source snippet。
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();
}
}
}