iPhone - строка подключения и файл БД - PullRequest
2 голосов
/ 21 ноября 2011

Я разрабатываю приложение для iPhone, используя Monotouch.Мне нужно получить доступ к Sqlite DB.В моей душе у меня есть контракты, доступ к данным, доступ к бизнесу и проект пользовательского интерфейса.У меня два вопроса:

  1. Где мне хранить файл БД?Первоначально я положил его в проекте доступа к данным.Когда я компилирую свой проект доступа к бизнесу, он копирует файл DB в выходной файл, но когда я компилирую свой проект пользовательского интерфейса, этого не происходит (пользовательский интерфейс имеет ссылку на доступ к бизнесу, который имеет ссылку на доступ к данным).Я переместил его в проект пользовательского интерфейса, но, кажется, неправильно держать его там.

  2. Где мне хранить строку подключения к БД?Есть ли концепция конфигурационных файлов?

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

Вот что мы делаем:

Мы отправляем копию БД в приложении.Он включен как Content, Always Copy в проект.

На компьютере пользователя он сохраняется в специальном каталоге Environment.SpecialFolder.Personal.

Когда приложение запускается, мы проверяем, чтобы увидетьесли база данных существует в системе пользователя и, если нет, скопируйте ее туда.

Строка подключения просто "Data Source=" + sDatabasePath.

Вот пример кода, который мы используем для этого(Я взломал соединение, так как мы используем класс homebuilt для управления БД, но вы должны понять):

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 голос
/ 24 ноября 2011

из интереса, вы смотрели на sqlite-net?http://code.google.com/p/sqlite-net/

Облегчает работу с БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...