2013-08-13 5 views
1

Я пытаюсь построить правильную строку соединения с SQLiteConnectionStringBuilder (System.Data.SQLite v1.0.88.0) с использованием либо источника данных или URI:SQLiteConnectionStringBuilder генерирует недопустимую строку соединения

Dim connectionBuilder = New SQLiteConnectionStringBuilder 
    connectionBuilder.DataSource = Path.Combine(datadir, "mydatabase.sqlite") 
    connectionBuilder.Version = 3 

    ' Open connection 
    Dim connection As New SQLiteConnection(connectionBuilder.ConnectionString) 

Или :

Dim connectionBuilder = New SQLiteConnectionStringBuilder 
    connectionBuilder.Uri = New Uri(Path.Combine(datadir, "mydatabase.sqlite")).AbsolutePath 
    connectionBuilder.Version = 3 

    ' Open connection 
    Dim connection As New SQLiteConnection(connectionBuilder.ConnectionString) 

Оба генерируют ту же строку соединения:

uri=file:///C:/Users/myusername/Documents/Visual%20Studio%202010/Projects/myproject/myproject/bin/Debug/data/mydatabase.sqlite;version=3 

сам URI, В.А. крышка, строка соединения на самом деле выглядит хорошо, но когда я пытаюсь открыть соединение, он генерирует NotSupportedException из-за формата пути в SQLite:

 bei System.Security.Util.StringExpressionSet.CanonicalizePath(String path, Boolean needFullPath) 
     bei System.Security.Util.StringExpressionSet.CreateListFromExpressions(String[] str, Boolean needFullPath) 
     bei System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[]   pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList) 
     bei System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String[] pathList, Boolean checkForDuplicates,   Boolean needFullPath) 
     bei System.IO.Path.GetFullPath(String path) 
     bei System.Data.SQLite.SQLiteConnection.ExpandFileName(String sourceFile, Boolean toFullPath) in c:\dev\sqlite\dotnet\System.Data.  SQLite\SQLiteConnection.cs:Zeile 2690. 
     bei System.Data.SQLite.SQLiteConnection.Open() in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteConnection.cs:Zeile 2009. 

Как я могу предотвратить это краткость построения строки соединения самостоятельно?

+0

Что 'datadir' вернуться именно? – Chris

+0

@Chris: Это абсолютный путь к каталогу как String. В моем коде я добавил File.Exists() - проверяет, действительно ли SQLite-файл существует. Это. –

ответ

0

Проблема была связана с проблемами с путями UNC, начиная с двух \\. Так или иначе, SQLiteConnectionStringBuilder избежал их неправильно.

Я решить мою проблему, заменив первый \\ с \\\:

connectionBuilder.DataSource = pathToFile.Replace("\\", "\\\") 
+0

Проблема, поданная для System.Data.SQLite: http://system.data.sqlite.org/index.html/tktview?name=01a6c83d51 –