在SQLite中存储数据

时间:2014-01-19 15:30:58

标签: c# sqlite

有没有办法在没有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);

感谢您的任何意见。

1 个答案:

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