20

以下のコードを使用して、ネットワーク コンピューター上にある 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: 

考え?

4

4 に答える 4

1

同様の問題がありました。UNC (\server\share\folder\file.db) をマップされたドライブ パス (S:\folder\file.db) に置き換えると、私のインスタンスの問題が解決します。

于 2014-05-27T05:41:38.010 に答える
0

エラーメッセージは非常に誤解を招きやすく、イライラさせられます。ローカル環境で正常に動作しているアプリケーションが、クライアント サーバーの状況では起動に失敗します。

それはにコードに関係しています。そのサーバー側に関連しています。

  • Writeファイルを含むサーバー フォルダにアクセスできることを確認します。

  • UNC [IP ベースのサーバー パス] はまだサポートされていません。この問題を解決するには、ネットワーク パス/フォルダーをマップする必要があります。

  • 一部のサイトとユーザーは、接続文字列にバージョン番号を記載するように言っています。私のアプリケーションはすべて、それを使用しなくても正常に動作しています。

接続文字列:

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

アップデート:

UNCパスの前に追加しようとしましたが、うまくいきました(途中ではなく、最初にのみ\\ 追加されました)。\\

Data Source=\\[UNC]\[SubFolders]\[FileName].db;
于 2015-02-22T18:51:02.210 に答える