繁体   English   中英

C#SQLite InvalidCastException

[英]C# Sqlite InvalidCastException

我找不到能帮助我的答案,所以我们开始吧,

我有一个为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,因为它似乎是唯一可以接受的类型,但仍然会引发错误。

由于conditionValues[i]返回object ,因此无法将其显式解析为DbType

您可以使用is运算符检查对象,以获取其兼容类型。

例如;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM