Я получаю сообщение об ошибке от 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 =, результат был таким же.
Я более склонен обвинять в вашем коде что-то, что не может обрабатывать пробелы в именах файлов. Но поскольку вы на самом деле не показываете соответствующий код ...
Извините, я добавил конкретный код. Учитывая заявление DinoCoderSaurus о том, что это работает для него, возможно, что-то не так с реализацией этого в Unity. Я продолжу заниматься этим на форумах Unity. Спасибо.
В строках подключения ODBC все значения могут быть заключены в фигурные скобки, но я не знаю, используется ли здесь тот же синтаксис.
Та же проблема, @Dan, ты что-нибудь узнал об этом?
Попробуй это ?
"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};
sqlite3
из командной строки Windows не имеет проблем с доступом к базе данных, имя которой содержит пробелы или запятые, если имя заключено в"
.