如何在C#中的SQL查询字符串中插入变量

时间:2016-10-26 16:37:32

标签: c# sqlite

我想为我的项目修改这个C#代码,但我不知道如何将我的变量值添加到查询中。

private String SQLSearch = "SELECT * FROM MYDATA WHERE Name = myVariable";

我不知道如何插入myVariable'在代码中。我试过这段代码:

String myVariable = "blablabla";

但它不起作用。我收到编译错误。

2 个答案:

答案 0 :(得分:5)

如果目标是为字符串添加可变值,则可以使用字符串插值。这看起来很......像这样:

string myText = "Hello World";
string myHelloWord = $"I say {myText}";

但不建议在Sql-Queries中这样做!在这里,您应该使用参数化查询。因此,您向sql添加一个特定元素,该元素由SqlParameter替换。您必须确定声明此参数。我们来看一个例子:

this.command.CommandText = "Select * From myValues Where id in (@param1, @param2)";
this.command.CommandType = CommandType.Text;
this.command.Parameters.Add(new SQLiteParameter("@param1", myVariable1));
this.command.Parameters.Add(new SQLiteParameter("@param2", myVariable2));
var reader = this.command.ExecuteQuery();

此参数对字符串插值有一些优势。起初你没有成为sql注入的风险。第二种方法是您的数据库将缓存该语句。如果仅使用字符串插值来更改where子句,则始终会向数据库发送新的查询。因此,数据库最多不能使用它的缓存。但是,如果您使用参数,则数据库知道您的查询,并且只需对更改的where子句做出反应。缓存效果更好。

答案 1 :(得分:0)

怎么样:

private String SQLSearchFormat = "SELECT * FROM MYDATA WHERE Name = {0}";

后来将其用作:

string myVariable = "blablabla";
string.Format(SQLSearchFormat, myVariable);

如果您从输入中提取myVariable,请注意SQL injection

由于这看起来非常像XY problem的另一种情况,因此您很可能希望使用参数化查询,因为其他评论和@ Sebi的回答表明。