[C#] SQLite でネットワーク上のファイルを Open する際の UNC パス指定方法

2023-09-02 (土)

\\ から始まる UNC パス のファイルをオープンする際に、例外が出るケースの対応方法です。

環境

  • .NET 7.0.400
  • C# 11.0
  • Visual Studio 2022 Version 17.7.2
  • Windows 11 Pro 22H2 22621.2134
  • Microsoft.Data.Sqlite 7.0.10
  • System.Data.SQLite 1.0.118

結果

System.Data.SQLite の接続文字列

var builder = new SQLiteConnectionStringBuilder();

// Replace で \\ を \\\\ にする
builder.DataSource = @"\\host\share\xxx.sqlite".Replace(@"\\", @"\\\\");

// 結果: data source=\\\\host\share\xxx.sqlite
var connectionString = builder.ToString();

Microsoft.Data.Sqlite の接続文字列

var builder = new SqliteConnectionStringBuilder();

// UNC パスをそのまま指定する
builder.DataSource = @"\\host\share\xxx.sqlite";

// 結果: Data Source=\\host\share\xxx.sqlite
var connectionString = builder.ToString();

説明

System.Data.SQLite の場合は、\\ から始まる UNC パスのファイルをオープンすると例外が発生します。

System.Data.SQLite.SQLiteException: 'unable to open database file'

ConnectionString.DataSource で \\\\\\ にする必要があります。

逆に、Microsoft.Data.Sqlite では \\\\ にすると例外が発生します。

Microsoft.Data.Sqlite.SqliteException: 'SQLite Error 14: 'unable to open database file'.'

オープンが成功するか例外になるか、以下のようになりました。

項目System.Data.SQLiteMicrosoft.Data.Sqlite
\\host\share\x.sqlite❌ 例外✅ 成功
\\\\host\share\x.sqlite✅ 成功❌ 例外
\\.\UNC\host\share\x.sqlite❌ 例外✅ 成功
\\\\.\UNC\host\share\x.sqlite✅ 成功❌ 例外

感謝

2023-09-02 (土)