Строка подключения sqlite не может содержать запятую?

Я получаю сообщение об ошибке от SQLite, когда строка подключения содержит запятую. У меня нет полного контроля над тем, где окажется база данных, поэтому возможно, что пользователь поместит ее в каталог, содержащий произвольные символы. В этом случае оказывается, что наличие запятой (,) в пути вызывает ошибку при подключении. Вот строка подключения:

Data Source=C:/Users/Dan/AppData/LocalLow/Gravia Software, LLC/Gravia/exampleDatabase.db;

Это приводит к следующему исключению при попытке подключения:

ArgumentException: Invalid ConnectionString format for parameter "LLC/Gravia/exampleDatabase.db"

Похоже, что проблема заключается в наличии запятой в строке подключения. Я пробовал экранировать команду (\,), заключив все это в кавычки, но, похоже, это не имеет значения. Любые идеи?

Редактировать:

Фактический код, который я выполнял, взят с этой страницы: https://ornithoptergames.com/how-to-set-up-sqlite-for-unity/

var dbPath = "URI=file:" + Application.persistentDataPath + "/exampleDatabase.db";
using (var conn = new SqliteConnection(dbPath)) {
    conn.Open(); // Error occurs here
    // etc
}

Я попытался изменить URI = file: на Data Source =, результат был таким же.

sqlite3 из командной строки Windows не имеет проблем с доступом к базе данных, имя которой содержит пробелы или запятые, если имя заключено в ".
DinoCoderSaurus 13.09.2018 20:35

Я более склонен обвинять в вашем коде что-то, что не может обрабатывать пробелы в именах файлов. Но поскольку вы на самом деле не показываете соответствующий код ...

Shawn 13.09.2018 22:09

Извините, я добавил конкретный код. Учитывая заявление DinoCoderSaurus о том, что это работает для него, возможно, что-то не так с реализацией этого в Unity. Я продолжу заниматься этим на форумах Unity. Спасибо.

Dan 14.09.2018 18:07

В строках подключения ODBC все значения могут быть заключены в фигурные скобки, но я не знаю, используется ли здесь тот же синтаксис.

CL. 18.09.2018 21:27

Та же проблема, @Dan, ты что-нибудь узнал об этом?

ab-tools 27.04.2020 18:41
0
5
312
3

Ответы 3

Попробуй это ?

"Data Source=" + "C:/Users/Dan/AppData/LocalLow/Gravia Software," + "LLC/Gravia/exampleDatabase.db";

Я решил так:

        var currDir = Directory.GetCurrentDirectory();

        Directory.SetCurrentDirectory(Path.GetDirectoryName(Application.streamingAssetsPath + "/DB/"));

        SqliteConnection dbcon = null;
        try
        {
            dbcon = new SqliteConnection(_Connection);
            dbcon.Open();
        }
        catch (Exception e)
        {
            Debug.Log(e.Message);
            return null;
        }
        finally
        {
            Directory.SetCurrentDirectory(currDir);
        }

Вы можете экранировать неподдерживаемые символы в переменных соединения ODBC, используя фигурные скобки ({}).

Так что оберните свою переменную, как показано ниже

Data Source={C:/Users/Dan/AppData/LocalLow/Gravia Software, LLC/Gravia/exampleDatabase.db};

Источник

Другие вопросы по теме