2011-09-02 2 views
2

이봐, 현재 공식적으로 지원되는 방법은 확실하지 않지만 vici coolStorage와 함께 Monodroid를 성공적으로 사용하는 사람들의 보고서가 있습니다. 어셈블리를 프로젝트에 드롭하고 컴파일 할 수 있었지만 특정 클래스가이를 사용하려고하면 컴파일 타임 오류가 발생합니다. 특별히 website.의 monoTouch 예제와 같이 연결을 시도 할 때. Vici를 사용하여 단 독소로 스토리지 저장

 

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의 방법을 사용하기 더 인텔리을 얻을 내가 CSConfig.SetDB에 3 개 개의 인수를 전달하려고 할 때() 나는 인수 오류의 잘못된 번호를.

답변

4

나는 그들의 샘플이 버그라고 생각한다. 당신도 바로 monop -r:Vici.CoolStorage.MT.dll Vici.CoolStorage.CSConfig은 Visual Studio 어셈블리 브라우저 또는 MonoDevelop 조립 브라우저 또는를 사용하는 경우, 당신은 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

축하해 주셔서 감사합니다. 나는 너가 그 jonp lol 이었다는 것을 몰랐다. – Terrance

0

좋아는 거래이다 :

수정 컴파일러가 말한대로 수행 실제로 존재하는 오버로드를 사용하는 것입니다. 예제가 잘못되어 프로젝트가 오픈 소스 인 것 같습니다.

최신 버전. 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(); 
     } 
    } 
}