使用 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;
}
您正在创建整数类型参数,因此将其值设置为整数而不是字符串
这是我正在创建的方法的代码:
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;
}
您正在创建整数类型参数,因此将其值设置为整数而不是字符串