ioangrozniy
@ioangrozniy

Как в C# можно на этапе подключения (до select) определить это sqlite3 база или какой то другой файл?

Делаю подключение к произвольному файлу. Я думал на уровне .Open вылетит исключение, однако нет, как будто всё хорошо.
SQLiteConnection dbConn = new SQLiteConnection("Data Source=" + dbPath + ";Version=3;Password=" + Pass + ";");
SQLiteCommand sqlCmd = new SQLiteCommand();
dbConn.Open();
sqlCmd.Connection = dbConn;

А вот уже когда я делаю запрос вылетает исключение, что это не база данных
string sqlQuery = "...................";
SQLiteDataAdapter adapter = new SQLiteDataAdapter(sqlQuery, dbConn);
DataTab.Clear();
adapter.Fill(DataTab); //Тут вылетает исключение

Есть ли варианты до селекта понять база ли это sqlite3 или что то другое, или может проблема с доступом (например пароль не правильный)?
  • Вопрос задан
  • 198 просмотров
Пригласить эксперта
Ответы на вопрос 2
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
1 - по вашей задумке, придется открывать файл, проверять сигнатуру (см ответ cicatrix), в случае успеха закрывать.. открывать уже как базу, но это не гарантирует ни правильность пароля, ни того что файл не битый и тд..

2 - при наличии проблем с доступом, все равно будут исключения, а знания о том база ли это? вы не получите

я к тому что обьем вспомогательной работы будет расти, и больше чем оно того стоило

может все таки просто обрабатывать исключения? на сколько я помню.. исключения по правам доступа вполне себе распознаются. думаю и исключения библиотеки для sqlite3 тоже вполне вменяемы
Ответ написан
@cicatrix
было бы большой ошибкой думать
SQLite Database File format

См. п. 1.2 1.2. The Database Header
Смещение 0, длина 16 байт строка: "SQLite format 3\000"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы