2011-09-02 72 views
2

嘿,目前我不知道官方如何支持它,但是,有人報告成功使用vici coolStorage與monodroid。 我已經能夠將程序集放到我的項目中並進行編譯,但是當我嘗試使用它們時,某些類會拋出編譯時錯誤。特別是在嘗試連接時,例如website.上的monoTouch示例。 使用Vici酷存儲與monodroid

 

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錯誤的無效號碼。

回答

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)"); 
}); 
+0

祝賀並再次感謝。我沒有意識到你是那個傑克大聲笑 – Terrance

0

好了,所以這裏的交易。這個例子是錯誤的,顯然這個項目是開源的。

所以在最新版本。布爾沒有超載。 查看源代碼片段。

 


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(); 
     } 
    } 
}