SQLite: не удается открыть сетевой файл программно, даже если он работал до

Я использовал приведенный ниже код, чтобы открыть файл базы данных SQLite, который находится на сетевом компьютере уже более года почти каждый день. Внезапно этим утром я не могу открыть файл программно.

private Boolean Connect(String strPathFile)
{
    // Initialize the connection object.
    this.DbConnection = null;

    try
    {
        // DATABASE: Create the connection string and set the settings.
        String strConnection = @"Data Source=" + strPathFile + @";Version=3;";

        // DATABASE: Connect to the database.
        this.DbConnection = new SQLiteConnection(strConnection);
        this.DbConnection.Open();

        return true;
    }

    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    return false;
}

Файл является сетевым ресурсом в форме "\ Server\ShareName\FileName.db" (меньше двойных кавычек).

Вот интересная вещь. У администратора SQLite нет проблем, открывающих файл сетевой базы данных, ни один, ни один раз. Я также могу открыть файл локально. Я скопировал файл на свой локальный диск и просто изменил путь в Visual Studio 2012 (VS2012).

Сервер казался прекрасным. В какой-то момент он прошел через перезагрузку с тех пор, как я проверил последний раз. Я предполагаю Microsoft Update. В Проводнике нет проблем с просмотром папки, и, как я уже сказал, администратор SQLite может открыть сетевой файл.

Я снова проверил разрешения, и у всех есть полный контроль, а также у пользователей сервера полный контроль, как на разрешениях безопасности, так и на разрешениях на доступ. Я проверил папку и файл, а разрешения - то же самое. Я ожидал так много, потому что администратор SQLite может открыть файл. На сервере не установлен брандмауэр, брандмауэр Windows или нет. Я тоже проверил это утро. Снова, администратор SQLite мог бы пожаловаться на это.

Я проверил запись, сделав копию файла на сетевом диске с помощью File Explorer. У этого не было проблем.

Разделение - это Windows Server 2003. Я использую 64-разрядную версию Windows 7 Professional.

Я также попытался открыть базу данных в режиме только для чтения, но это тоже не удалось. Я ожидал такого поведения. Администратор SQLite по-прежнему работает хорошо.

Я пробовал различные строки подключения, включая SQLiteConnectionStringBuilder(), чтобы увидеть, что происходит, и все дороги ведут в Рим, а именно:

System.Data.SQLite.SQLiteException occurred
  HResult=-2147467259
  Message=unable to open database file
  Source=System.Data.SQLite
  ErrorCode=14
  StackTrace:
       at System.Data.SQLite.SQLite3.Open(String strFilename, SQLiteConnectionFlags connectionFlags, SQLiteOpenFlagsEnum openFlags, Int32 maxPoolSize, Boolean usePool)
       at System.Data.SQLite.SQLiteConnection.Open()
       at SQL.cSQL.Connect(String strPathFile) in C:\<Path to source file>:line 367
  InnerException: 

Мысли?

Ответ 1

Я только что оставил комментарий, указывающий, что я помню. Я не хотел оставлять эту ветку без ответа, вот что я написал о том, что я вспомнил.

Я сделал что-то, к сожалению, не помню, что на данный момент, и проблема исчезла. Я не делал ничего программно, чтобы решить проблему. Резолюция была чем-то, что я сделал на сервере. Возможно, вы захотите попробовать перезагрузить сервер. Проблема имела какое-то отношение к блокировке файлов или тому подобному.

Ответ 2

в версии > 1.0.82.0

  • Двойное совпадение двух обратных косых черт в имени файла (например, "\\\\network\share\file.db").

  • Используйте сопоставленную букву диска.

  • Используйте конструктор SQLiteConnection, который выполняет parseViaFramework boolean аргумент и передать 'true' для этого аргумента.

Смотрите сообщение SQL здесь

Ответ 3

У меня была аналогичная проблема. Замена UNC (\ server\share\folder\file.db) с подключенным диском (S:\folder\file.db) разрешает проблему в моем экземпляре.

Ответ 4

Сообщение об ошибке очень вводит в заблуждение + раздражает. Приложения, работающие нормально в локальной среде, не запускаются в ситуации клиентского сервера.

Он имеет в основном, который указывает на код. Его отношение к серверной стороне.

  • Убедитесь, что доступ к Write доступен для папки сервера, содержащей файл.

  • UNC [IP-путь к серверу] еще не поддерживается, сетевой путь/папка должна отображаться для устранения этой проблемы.

  • Некоторые сайты + пользователи говорят о том, что в строке подключения упоминается номер версии. Все мои приложения работают отлично без, используя его.

Строка подключения:

Data Source=[Mapped Server Location]\[SubFolders]\[FileName].db;

Update:

Я попытался добавить \\ в UNC-путь, и он сработал (добавлен дополнительный \\ только в начале, а не промежуточный).

Data Source=\\[UNC]\[SubFolders]\[FileName].db;