使用 c# 将多个参数值插入到 sqlite table

Inserting multiple parameter values to a sqlite table using c#

这是我正在创建的方法的代码:

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 数据库引擎(如果重要的话)。目前,当我尝试存储数据时显示的错误如下

"Unable to cast object of type 'System.String' to type 'System.Data.SQLite.SQLiteParameter'" at the line "insertCommand.Parameters.Add(new SQLiteParameter("@param1", System.Data.SqlDbType.VarChar).Value = inputText);".

我公开(自由地)承认我不太确定如何解决这个问题,因为我是新手,这是我的第二个重要项目。

提前谢谢你的好意。

当你调用Add method of the DbParameterCollection(SQLiteParameterCollection背后的基础class)传递一个DbParameter对象时,return值是一个Integer,而不是刚刚添加到集合中的DbParameter .
因此,您不能使用 return 值,因为它是 DbParameter 并尝试设置值 属性。

相反,您应该使用带有参数名称和类型的 Add 重载。这 return 是一个 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;
}

您正在创建整数类型参数,因此将其值设置为整数而不是字符串