sqlite CommandText参数未替换为提供的值/错误提供的参数不足

gopyfrb3  于 2022-11-14  发布在  SQLite
关注(0)|答案(1)|浏览(210)

为了测试SQLite,我创建了一个非常简单的SQLite DB(Verion 3),它有一个表和两个列(ID int,UserInputText)...ID为自动递增。
我想插入一个来自文本框的用户输入的值,但是,当我检查返回的CommandText时,该参数不会被替换,而是保留为“(@paramInput)”

private void button1_Click(object sender, RibbonControlEventArgs e)
        {
            using (SQLiteConnection cnn = new SQLiteConnection(LoadConnectionString()))
            {
                string strValue = editBox1.Text;
                SQLiteCommand cmd = cnn.CreateCommand();
                cmd.CommandText = "insert into main.TestTable (UserInput) values (@paramInput)";

                //replace @paramInput by using AddWithValue
                cmd.Parameters.AddWithValue("@paramInput", strValue);

                //check result before 
                MessageBox.Show(cmd.CommandText);
                
                //write to DB
                cnn.Execute(cmd.CommandText);
            }
        }

我也尝试过使用参数。添加:

//replace @paramInput by using Add
                cmd.Parameters.Add("@paramInput", DbType.String);
                cmd.Parameters[0].Value = strValue;

但是,CommandText仍然是:“INSERT INTO Main.TestTable(UserInput)VALUES(@parInput)”,这显然会导致在发送到数据库时出现错误消息“Error Income PARAMETERS SUPPORTED”。
我遗漏了什么?我已经查看了各种示例,它们似乎都通过AddWithValue或参数来填充参数。当然,我可以在查询中使用C#参数,但至少出于好奇,我想知道我做错了什么。
System.Data.SQLite.Core 1.0.116

pxy2qtax

pxy2qtax1#

我更喜欢调用cmd.ExecuteNonQuery();而不是cnn.Execute(cmd.CommandText);,因为您试图执行设置为cmd.CommandText的文本“INSERT INTO Main.TestTable(UserInput)Values(@paramInput)”,而参数没有被实际的值替换。

using (SQLiteConnection cnn = new SQLiteConnection(LoadConnectionString()))
{
    string strValue = editBox1.Text;
    SQLiteCommand cmd = cnn.CreateCommand();
    cmd.CommandText = "insert into main.TestTable (UserInput) values (@paramInput)";

    //replace @paramInput by using AddWithValue
    cmd.Parameters.AddWithValue("@paramInput", strValue);

    //check result before 
    MessageBox.Show(cmd.CommandText);
                
    //write to DB
    cmd.ExecuteNonQuery();
}

相关问题