如何在system.data.sqlite中转义字符串?

时间:2014-08-12 09:53:56

标签: c# sqlite system.data.sqlite .net-4.5

我正在执行SQL查询(system.data.SQLite),如下所示:

var color = "red";
var command = new SQLiteCommand("SELECT something FROM tabletop WHERE color = '" + color + "'", Connection);
var reader = command.ExecuteReader();

颜色变量是用户提供的文本。 如何逃避此文本以防止SQL注入? 或者这是一种不好的做法,我应该在一些完全不同的"受保护的"方式是什么?

2 个答案:

答案 0 :(得分:5)

您应该使用参数化查询:

var command = new SQLiteCommand("SELECT something FROM tabletop WHERE color = @Color", Connection);
command.Parameters.AddWithValue("Color", color);

您还可以将SQLiteParameter数组传递到command.Parameters集合中,如下所示:

SQLiteParameter[] parameters = { new SQLiteParameter("Color", color), new SQLiteParameter("Size", size) }; // etc.
command.Parameters.AddRange(parameters);

答案 1 :(得分:2)

您可以使用预先准备好的声明:

SQLiteCommand sql = SQLiteDB.CreateCommand();
sql.CommandText = @"INSERT INTO aziende VALUES (@id_azienda, @nome)";

SQLiteParameter lookupValue = new SQLiteParameter("@id_azienda");
SQLiteParameter lookupValue2 = new SQLiteParameter("@nome");

sql.Parameters.Add(lookupValue);
sql.Parameters.Add(lookupValue2);

lookupValue.Value = "Your unsafe user input goes here";
lookupValue2.Value = "Your second unsafe user input goes here";

sql.ExecuteNonQuery();