我试图在c#中将MySQL select命令与2个变量一起使用,但它仅对一个变量起作用。

我的目标是创建一个使用MySQL表的登录系统,该表包含3列:UserName,Password和TableName。
然后,我想转到另一个表(使用TableName作为表名),并且在该表中有关于我在WPF ListBox中显示的人员的信息。

return connection.Query<Person>($"select * from "+ TableName +" where PhoneNumber LIKE "+ searchData and id > 0 order by Name").ToList();


我使用此代码通过电话号码搜索列表。

TableName和searchData是变量。

这是我的代码不起作用。

最佳答案

根本没有参数化;参数是特定的SQL概念,因此您可能具有:

return connection.Query<Person>(
 $"select * from {TableName} where PhoneNumber LIKE @searchData and id > 0 order by Name",
 new { searchData  }).AsList();


(或:searchData等,具体取决于SQL的变体)

这将正确设置searchData的参数。

但是请注意,不能对表名进行参数化。通常,应该避免将表名注入SQL,但是当您需要这样做时,就必须像已经将其连接起来一样。建议将表名列入白名单,因为您不能阻止它成为SQL注入孔。

09-27 02:55