我无法找到帮助我的答案,所以我们走了,
我有这个函数为我的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,因为它是它似乎接受的唯一类型,但仍然会抛出错误。
答案 0 :(得分:1)
由于conditionValues[i]
返回object
,您无法将其明确解析为DbType
。
您可以使用is
operator检查对象是否与其兼容。
例如;
if(conditionValues[i] is int)
{
da.SelectCommand.Parameters.Add("@" + conditionColumns[i], DbType.Int32).Value = conditionColumns[i];
}