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;