2023-09-02 (土)
[C#] SQLite でネットワーク上のファイルを Open する際の UNC パス指定方法
\\
から始まる 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 (v1.0.118 で確認)
- Microsoft.Data.Sqlite (v7.0.10 で確認)
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.SQLite | Microsoft.Data.Sqlite |
---|---|---|
\\host\share\x.sqlite | ❌ 例外 | ✅ 成功 |
\\\\host\share\x.sqlite | ✅ 成功 | ❌ 例外 |
\\.\UNC\host\share\x.sqlite | ❌ 例外 | ✅ 成功 |
\\\\.\UNC\host\share\x.sqlite | ✅ 成功 | ❌ 例外 |
感謝
関連記事
新着記事