为什么我得到“;无效的强制转换异常“;使用此SQLite代码

本文关键字:异常 代码 转换 SQLite 无效 为什么 | 更新日期: 2023-09-27 18:29:14

我有这样的代码来从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;
}

当它运行时,我得到,"无效铸造异常"

很明显,从查询返回的值是int,也就是说记录的计数(当我运行查询时,我得到"2",即Sqlite Browser中的"SELECT count(*)from WorkTables")。

那么,这里无效铸造的是什么呢?

顺便说一句,我知道使用查询参数更好,我在这里的Windows应用商店应用程序中找到了如何做到这一点[我如何在WinRT应用程序中使用SQLite查询参数?,但不知道如何在旧的(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);
}

但没有我尝试编译的同类。

为什么我得到“;无效的强制转换异常“;使用此SQLite代码

在此上下文中,ExecuteScalar返回一个System.Int64
应用(int)强制转换会创建您看到的异常

object result = cmd.ExecuteScalar();
Console.WriteLine(result.GetType());  // System.Int64

你可以用Convert.ToInt32 解决你的问题

SQLiteCommand cmd = new SQLiteCommand(qry, con);
count = Convert.ToInt32(cmd.ExecuteScalar());