Я получил этот код, чтобы получить количество из SQLite таблицы:Почему я получаю «Invalid Cast Exception» с этим кодом 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 Browser).
Итак, что здесь недействительно брошено?
В качестве своего рода примечания, я знаю, что лучше использовать параметры запроса, и я узнал, как это сделать в приложении для Windows Store здесь [How can I use SQLite query parameters in a WinRT app?, но не знаю, как это сделать в старомодном (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' не поступает с пользовательского ввода. –
'Итак, что здесь недействительно отбрасывается? Исключение, которое вы получаете, может сказать строку. –
@ L.B: Нет, это все, что он говорит. –