SQL查询C#的In子句中的多个Id#

我想基本上在我的SQL查询的In子句中使用多个iD。 现在我有两个选项,一个是从文本框中获取逗号分隔的ID,或者我可以放置一个列表视图或网格视图来插入id,然后获取要在sql语句中使用的id。 你能帮我解决一下代码,怎么做这件事?

为了获得文本框值,您必须像这样编码: –

 "select * from table where id in ( "+textbox1.text+")"; 

但这会导致你出现Sql Injection问题。 所以更好的方法是: –

 var command = new SqlCommand("SELECT * FROM table WHERE id = @value") { Connection = connection(); }; command.Parameters.AddWithValue("value", textbox1.text); var dataReader = command.ExecuteReader(); 

将用户输入发送到数据库的正确方法是使用参数。 IN运算符经常会让没有经验的开发人员感到困惑,因为他们中的很多人都试图将它与包含逗号分隔值的单个参数一起使用,并期望它返回结果。 但是这是一个错误,因为IN运算符需要一个值列表,而不是包含列表的单个值。

因此,要为IN运算符参数化查询,您需要做的是在代码中分解逗号分隔的字符串,并为查询提供每个值的参数。

这是一个基本的例子:

 var userInput = "1,2,3,4,5,6"; var values = userInput.Split(','); using(var command = new OdbcCommand()) { var sql = "SELECT * FROM table where id IN("; for(int i=0; i < values.Length; i++) { sql = $"{sql} @{i},"; command.Parameters.Add($"@{i}", OdbcType.Int).Value = values[i]; } command.CommandText = sql.TrimEnd(',') +");"; command.Connection = con; using(var reader = Command.ExecuteReader()) { while(reader.Read()) { // do your stuff with the data } } }