我正在使用Monotouch开发iPhone应用程序。我需要访问Sqlite DB。在我的灵魂中,我有合同,数据访问,业务访问和UI项目。我有两个问题:
我应该在哪里保留我的数据库文件?最初,我把它放在数据访问项目中。当我编译我的业务访问项目时,它将DB文件复制到输出,但是当我编译我的UI项目时它没有(UI具有对业务访问的引用,其具有引用数据的引用)。我把它移到了UI项目中,但是把它保留在那里感觉不对。
我应该将连接字符串保存到数据库中?是否有配置文件的概念?
答案 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)
使您的数据库处理更加轻松。