2013-05-22 6 views
0

Я создал файл SqlLite 3 db и поместил его в папку App_Data моего проекта (ASP.Net Web API). Кажется, я не могу подключиться к нему. Сообщение об исключении является неопределенным, и я не могу определить, что не так. Права доступа? Файл не найден? Без понятия.SqlLite 3 - «Не удалось открыть базу данных»

Я создал следующую запись ConnectionString в моем web.config:

<connectionStrings> 
<add name="LiteConnection" connectionString="Data Source=~\App_Data\repository.s3db;Version=3;" /> 

Исключение броска при попытке открыть() соединение. Я начинаю подозревать, что, возможно, IISExpress (VS2012) не может писать в этот каталог или что-то в этом роде?

private string _dbLitePath = ConfigurationManager.ConnectionStrings["LiteConnection"].ConnectionString; 

... 
     public IDbConnection GetConnection() 
    { 
     try 
     { 
      if (_connection == null) 
       _connection = new SQLiteConnection(_dbLitePath); 

      if (_connection.State != ConnectionState.Open) 
      { 
       _connection.ConnectionString = _dbLitePath; 
       _connection.Open(); // kaaaaasplat! 
      } 
     } 
     catch (SQLiteException e) 
     { 

     } 
     return _connection; 
    } 
+0

Что исключение вы получите? –

+0

Итак, если вы входите в этот код во время отладки, каково значение _dbLitePath? Если это не полный путь к системе, например. «C: \ whatever», то это ваша проблема. –

+0

Исключение было именно так, как я уже говорил. «невозможно открыть файл базы данных» - не полезно :) – Nick

ответ

3

Попробуйте изменить вам строку соединения:

connectionString="Data Source=|DataDirectory|\repository.s3db 

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

Ссылка на Where is DataDirectory

+0

Я пытаюсь. Разве это не требует, чтобы я «делал» замену в коде? то есть предоставить каталог данных – Nick

+0

Вы можете изменить в коде местоположение (перед попыткой любого кода доступа к данным) с помощью «AppDomain.CurrentDomain.SetData» («DataDirectory», «.....»)) ;, но строка | DataDirectory | должен быть уже там – Steve

+0

Вы не можете указать строку соединения с DB на относительный URL. Это имеет смысл только для веб-инфраструктуры, а не для драйвера ODBC. Используйте Справочник данных, как предлагает Стив. По умолчанию это папка App_Data в проекте. –

Смежные вопросы