以下是我正在创建的方法的代码:
public void writeIt(string inputText, bool fasting)
{
var dbConnect = new SQLiteConnection("Data Source=database.sqlite;Version=3;");
dbConnect.Open();
using (SQLiteTransaction insertTrans = dbConnect.BeginTransaction())
{
using (SQLiteCommand insertCommand = new SQLiteCommand(dbConnect))
{
SQLiteParameter resultEntry = new SQLiteParameter();
insertCommand.CommandText = "INSERT INTO result(testResult, fasting) VALUES(@param1, @param2)";
insertCommand.Parameters.Add(new SQLiteParameter("@param1", System.Data.SqlDbType.VarChar).Value = inputText);
if(fasting)
{
insertCommand.Parameters.Add(new SQLiteParameter("@param2", System.Data.SqlDbType.Int).Value = "1");
}
else
{
insertCommand.Parameters.Add(new SQLiteParameter("@param2", System.Data.SqlDbType.Int).Value = "0");
}
insertCommand.ExecuteNonQuery();
}
insertTrans.Commit();
}
我正在使用官方的sqlite数据库引擎(如果这很重要)。目前,当我尝试存储数据时显示的错误说明如下
“无法将类型为'System.String'的对象强制转换为类型 'System.Data.SQLite.SQLiteParameter'“在该行 “insertCommand.Parameters.Add(new SQLiteParameter(”@ param1“, System.Data.SqlDbType.VarChar).Value = inputText);“。
我公开(并且自由地)承认我不太确定如何解决这个问题,因为我是新手,这是我的第二个任何重要项目。
感谢您的好意。
答案 0 :(得分:0)
当您调用传递DbParameter对象的Add method of the DbParameterCollection(SQLiteParameterCollection背后的基类)时,返回值是Integer,而不是刚刚添加到集合中的DbParameter。 因此,您不能使用返回值,因为它是DbParameter并尝试设置Value属性。
相反,您应该使用带参数名称和类型的Add重载。这将返回一个DbParameter对象,因此您可以编写:
insertCommand.Parameters.Add("@param1", System.Data.SqlDbType.VarChar).Value = inputText;
if(fasting)
{
insertCommand.Parameters.Add("@param2", System.Data.SqlDbType.Int).Value = 1;
}
else
{
insertCommand.Parameters.Add("@param2", System.Data.SqlDbType.Int).Value = 0;
}
您正在创建整数类型参数,因此请将其值设置为整数而不是字符串