为了测试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
1条答案
按热度按时间pxy2qtax1#
我更喜欢调用
cmd.ExecuteNonQuery();
而不是cnn.Execute(cmd.CommandText);
,因为您试图执行设置为cmd.CommandText
的文本“INSERT INTO Main.TestTable(UserInput)Values(@paramInput)”,而参数没有被实际的值替换。