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

3

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

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

颜色变量是用户提供的文本。 我如何转义此文本以防止SQL注入? 或者这是一种不好的做法,我应该以某种完全不同的“保护”方式执行查询?


你必须使用此问题中显示的语法:http://stackoverflow.com/questions/22015572/sqlite-exception-using-string-format-args-wrong-syntax - aalku
2个回答

9

你应该使用参数化查询:

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);

我需要为每个变量都有command.Parameters.AddWithValue行,还是有一些方法可以传递数组或其他集合吗? - Fred

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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接