使用c#

时间:2016-03-05 09:12:41

标签: c# sqlite system.data.sqlite sqlite-net

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

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);“。

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

感谢您的好意。

1 个答案:

答案 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;
}

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