![](/img/trans.png)
[英]SQLite in C# throws “InvalidCastException” using .GetBytes
[英]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.