C# .NET-来自非用户输入的MySql查询参数

C# .NET-来自非用户输入的MySql查询参数,c#,mysql,query-parameters,C#,Mysql,Query Parameters,我知道在查询中使用参数会阻止sql注入(当从用户输入中获取值时)。但是如果我想构造一个使用预定义值的查询,例如 MySqlCommand Command = Connection.CreateCommand(); Command.CommandText = "SELECT employee_address FROM employees WHERE employee_name = @employee_name"; Command.Parameters.AddWithValue("employee_

我知道在查询中使用参数会阻止sql注入(当从用户输入中获取值时)。但是如果我想构造一个使用预定义值的查询,例如

MySqlCommand Command = Connection.CreateCommand();
Command.CommandText = "SELECT employee_address FROM employees WHERE employee_name = @employee_name";
Command.Parameters.AddWithValue("employee_name", "John");
我可以不用这个吗

MySqlCommand Command = Connection.CreateCommand();
Command.CommandText = "SELECT employee_address FROM employees WHERE employee_name = 'John'";
在这种情况下是否需要使用参数

更新

我也可以这样做吗

string employee_name = "John"; //value depends on some sort of selection (not user input)

MySqlCommand Command = Connection.CreateCommand();
Command.CommandText = "SELECT employee_address FROM employees WHERE employee_name = '" + employee_name + "'";

我建议始终使用参数。使用字符串很简单,但可以猜测您有一个布尔值、十进制或日期。不要考虑格式,这会有所帮助


使用参数时,如果使用@0、@1、@2,则sql语句可以更短。您甚至可以编写一个带有参数数组的函数,该数组按照@0、@1、@2的顺序进行替换。这节省了大量代码。(例如,ExecuteSql(sql作为字符串,paramarray myParameters作为对象)

我建议始终使用参数。使用字符串很简单,但可以猜测您有布尔值、十进制或日期。这有助于不考虑格式设置


使用参数时,如果使用@0、@1、@2,您的sql语句可以更短。您甚至可以使用参数数组编写函数,该数组按照@0、@1、@2的顺序进行替换。这样可以节省大量代码。(例如,ExecuteSql(sql作为字符串,paramarray myParameters作为对象)

如果你不把这个
'John'
作为输入,不,不需要。那么你的代码就是fine@Joachim-查看更新-值“John”可能是其他值,例如“Jack”,取决于某种选择,这会有什么区别吗?@langjacques实际上,从主题上看,MySQL似乎仍然只有一个查询缓存,而不是查询计划缓存。查询缓存不会对您的参数化产生任何影响,而查询计划缓存则会产生任何影响。换句话说,语句在缓存方面的行为应该相同,无论是否参数化。@Joachim-好的,谢谢您提供的信息!如果您不将此
'John'
作为输入,则不需要。那么您的代码是fine@Joachim-查看更新-值“John”可能是其他值,例如“Jack”,取决于某种选择,这会有什么不同吗?@langjacques事实上,阅读这个主题,MySQL似乎仍然只有一个查询缓存,而不是查询计划缓存。查询缓存不会对您的参数化产生任何影响,而查询计划缓存应该有。换句话说,语句在缓存方面的行为应该是相同的,参数化与否。@Joachim-好的,谢谢你提供的信息!