iPhone - 连接字符串和数据库文件

时间:2011-11-20 21:27:25

标签: iphone sqlite configuration xamarin.ios

我正在使用Monotouch开发iPhone应用程序。我需要访问Sqlite DB。在我的灵魂中,我有合同,数据访问,业务访问和UI项目。我有两个问题:

  1. 我应该在哪里保留我的数据库文件?最初,我把它放在数据访问项目中。当我编译我的业务访问项目时,它将DB文件复制到输出,但是当我编译我的UI项目时它没有(UI具有对业务访问的引用,其具有引用数据的引用)。我把它移到了UI项目中,但是把它保留在那里感觉不对。

  2. 我应该将连接字符串保存到数据库中?是否有配置文件的概念?

2 个答案:

答案 0 :(得分:2)

以下是我们的工作:

我们在应用程序中发送了DB的副本。它包含在内容中,始终在项目中复制。

在用户的计算机上,它存储在特殊目录Environment.SpecialFolder.Personal

当应用程序启动时,我们会检查用户系统上是否存在数据库,如果没有,请将其复制到那里。

连接字符串只是"Data Source=" + sDatabasePath

以下是我们用于此的代码示例(由于我们使用自制类来管理数据库,因此我已经入侵了连接内容,但您应该明白这一点):

const string DATABASE_FILE_NAME = "MyDB.db3";
bool fSuccess = false;
DbConnection conn = new DbConnection ();

string sApplicationDir = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.Personal), "MyApplicationSubDir");
if (!Directory.Exists (sApplicationDir)) {
    Directory.CreateDirectory (sApplicationDir);
}

// Generate the directory to the database file
string sDatabaseDir = Path.Combine (sApplicationDir, "Database");
m_sDatabaseDir = sDatabaseDir;

if (!Directory.Exists (sDatabaseDir)) {
    Directory.CreateDirectory (sDatabaseDir);
}

// Generate the path to the database file
string sDatabasePath = Path.Combine (sDatabaseDir, DATABASE_FILE_NAME);
m_sDatabaseFile = sDatabasePath;

// If the file does not not exist
if (!File.Exists (sDatabasePath)) {
    // Copy the base implementation
    File.Copy (Path.Combine (Path.Combine (Environment.CurrentDirectory, "Database"), DATABASE_FILE_NAME), sDatabasePath);
}

// Initialize the DB
conn.ConnectionString = "Data Source=" + sDatabasePath;

答案 1 :(得分:1)

出于兴趣,你看过sqlite-net吗? http://code.google.com/p/sqlite-net/

使您的数据库处理更加轻松。