以下のコードを使用して、ネットワーク コンピューター上にある SQLite データベース ファイルを 1 年以上、ほぼ毎日のように開いています。今朝突然、プログラムでファイルを開くことができなくなりました。
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 Administrator はファイルを開くことができるので、期待通りでした。サーバーには、Windows ファイアウォールなどのファイアウォールが設定されていません。今朝も再確認しました。繰り返しますが、SQLite 管理者はそれについて不平を言ったでしょう。
ファイル エクスプローラーを使用してネットワーク ドライブにファイルのコピーを作成し、書き込みを確認しました。問題はありませんでした。
サーバーは Windows Server 2003 です。Windows 7 Professional 64 ビットを使用しています。
また、データベースを読み取り専用モードで開こうとしましたが、それも失敗しました。私はその行動を期待していました。SQLite Administrator は今でも問題なく動作します。
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:
考え?