У меня есть этот код, чтобы получить счет из таблицы SQLite:
internal static bool TableExistsAndIsNotEmpty(string tableName)
{
int count;
string qry = String.Format("SELECT COUNT(*) FROM {0}", tableName);
using (SQLiteConnection con = new SQLiteConnection(HHSUtils.GetDBConnection()))
{
con.Open();
SQLiteCommand cmd = new SQLiteCommand(qry, con);
count = (int)cmd.ExecuteScalar();
}
return count > 0;
}
Когда он запускается, я получаю сообщение "Invalid Cast Exception".
Как, вероятно, очевидно, значение, возвращаемое из запроса, представляет собой int, то есть количество записей (я получаю «2», когда запускаю запрос, а именно «SELECT COUNT (*) FROM WorkTables» в браузере Sqlite) .
Так что же здесь недопустимо?
В качестве примечания я знаю, что лучше использовать параметры запроса, и я узнал, как это сделать в приложении Магазина Windows, здесь [Как я могу использовать параметры запроса SQLite в приложении WinRT?, но не знаю, как это сделать в старомодное (Windows Forms/Windows CE) приложение.
Я бы подумал, что это будет что-то вроде этого:
string qry = "SELECT COUNT(*) FROM ?";
using (SQLiteConnection con = new SQLiteConnection(HHSUtils.GetDBConnection()))
{
con.Open();
SQLiteCommand cmd = new SQLiteCommand(con);
count = cmd.ExecuteScalar(qry, tableName);
}
... но ничего из того, что я пытался скомпилировать.
String.Format
прекрасно подходит здесь, покаtableName
не исходит из пользовательского ввода. - person Lucas Trzesniewski   schedule 06.11.2014So what is being invalidly cast here?
Исключение, которое вы получите, может сказать строку. - person L.B   schedule 06.11.2014