有没有办法在没有SQLite试图解析它的情况下将TEXT存储在SQLite数据库中? 遇到一个问题,当你存储类似于SQLite查询的TEXT时,它会出于某种原因尝试解析它。
我用来保存文字的查询:"insert into tableName (Name, DateCreated, Reminder, Content) values ('name', 'currentDate', 'reminder', 'content')".
我正试图保存的类似文字:"SELECT NAME FROM sqlite_master WHERE TYPE='table' ORDER BY NAME".
当我尝试保存类似的内容时,它会说:错误:SQL逻辑错误或“table”附近缺少数据库:语法错误
请注意,值(name,currentDate,提醒,内容)不是硬编码的,它们是作为字符串传递的。实际代码如下:
SQLiteCommand command = new SQLiteCommand("insert into " + cateName + " (Name, DateCreated, Reminder, Content) values ('" + noteName + "', '" + currentDate + "', '" + reminder + "', '" + content + "')", connection);
感谢您的任何意见。
答案 0 :(得分:2)
正如我所怀疑的那样,问题在于你将你的值直接放入SQL中 - 甚至没有试图逃避它们。 不要这样做。除了你看到的问题,你已经打开了SQL injection attack。请改用参数化SQL ,并指定参数的值。
例如:
// It's not clear what cateName is, but I'll assume *that* bit is valid...
string sql = new SQLiteCommand("insert into " + cateName +
" (Name, DateCreated, Reminder, Content) values " +
"(@Name, @DateCreated, @Reminder, @Content)");
using (var command = new SQLiteCommand(sql, connection))
{
command.Parameters.Add("@Name", SQLiteType.Text).Value = noteName;
command.Parameters.Add("@DateCreated", SQLiteType.DateTime).Value = currentDate;
command.Parameters.Add("@Reminder", SQLiteType.Text).Value = reminder;
command.Parameters.Add("@Content", SQLiteType.Text).Value = content;
command.ExecuteNonQuery();
}