C#Sqlite InvalidCastException

时间:2015-11-21 21:23:14

标签: c# .net sqlite

我无法找到帮助我的答案,所以我们走了,

我有这个函数为我的SQLiteDataAdapter发出命令, 现在它在我使用FireBird的程序中运行良好,遗憾的是我现在正在使用移动框架,它似乎在这里工作。

public DataTable Get(string tableName, string[] selectColumns, string[] conditionColumns,
                         object[] conditionValues)
    {
        if (conditionColumns.Length != conditionValues.Length)
        {
            throw new Exception("Length of columns and values is different");
        }

        DataTable dt = new DataTable();
        StringBuilder stringB = new StringBuilder();
        try
        {
            stringB.Append("SELECT ");
            if (selectColumns == null)
            {
                stringB.Append("* ");
            }
            else
            {
                for (int i = 0; i < selectColumns.Length; i++)
                {
                    stringB.Append(selectColumns[i]);
                    if (i == selectColumns.Length - 1)
                    {
                        stringB.Append(" ");
                    }
                    else
                    {
                        stringB.Append(", ");
                    }
                }
            }
            stringB.Append("FROM ");
            stringB.Append(tableName + " ");
            stringB.Append("WHERE (");
            for (int i = 0; i < conditionColumns.Length; i++)
            {
                stringB.Append(conditionColumns[i] + " = @" + conditionColumns[i]);
                if (i < (conditionColumns.Length - 1))
                {
                    stringB.Append(" AND ");
                }
                else
                {
                    stringB.Append(")");
                }
            }
            SQLiteDataAdapter da = new SQLiteDataAdapter(stringB.ToString(), connection);

            for (int i = 0; i < conditionColumns.Length; i++)
            {
                da.SelectCommand.Parameters.Add("@" + conditionColumns[i], (DbType)conditionValues[i]);
            }
            da.Fill(dt);
            return dt;
        }
        catch (Exception e)
        {
            throw new Exception("Database error :\r\n" + stringB + "\r\n" + e.Message, e);
        }
    }

现在这是我的功能,错误被抛出

da.SelectCommand.Parameters.Add("@" + conditionColumns[i], (DbType)conditionValues[i]);

错误

  

数据库错误:   SELECT * FROM ANIMALS WHERE(animal_number = @animal_number)   InvalidCastException的

我不确定现在要做什么,我投出DbType,因为它是它似乎接受的唯一类型,但仍然会抛出错误。

1 个答案:

答案 0 :(得分:1)

由于conditionValues[i]返回object,您无法将其明确解析为DbType

您可以使用is operator检查对象是否与其兼容。

例如;

if(conditionValues[i] is int)
{
     da.SelectCommand.Parameters.Add("@" + conditionColumns[i], DbType.Int32).Value = conditionColumns[i];
}