SQL 查询 C# 的 In 子句中的多个 ID
Multiple Id's in In clause of SQL Query C#
我基本上想在 sql 查询的 In 子句中使用多个 iD。
现在我有两个选择,一个是从文本框中获取逗号分隔的 ID,或者我可以放置一个列表视图或网格视图以在其中插入 ID,然后获取要在 sql 语句中使用的 ID。你能帮我写代码吗,这个怎么做?
为了获得文本框的值,您必须这样编码:-
"select * from table where id in ( "+textbox1.text+")";
但这会导致您遇到 Sql 注入问题。所以更好的方法是:-
var command = new SqlCommand("SELECT * FROM table WHERE id = @value")
{
Connection = connection();
};
command.Parameters.AddWithValue("value", textbox1.text);
var dataReader = command.ExecuteReader();
将用户输入发送到数据库的正确方法是使用参数。
IN
运算符经常让没有经验的开发人员感到困惑,因为他们中的许多人试图将它与包含逗号分隔值的单个参数一起使用,并期望它得到 return 结果。然而,这是一个错误,因为 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
}
}
}
我基本上想在 sql 查询的 In 子句中使用多个 iD。 现在我有两个选择,一个是从文本框中获取逗号分隔的 ID,或者我可以放置一个列表视图或网格视图以在其中插入 ID,然后获取要在 sql 语句中使用的 ID。你能帮我写代码吗,这个怎么做?
为了获得文本框的值,您必须这样编码:-
"select * from table where id in ( "+textbox1.text+")";
但这会导致您遇到 Sql 注入问题。所以更好的方法是:-
var command = new SqlCommand("SELECT * FROM table WHERE id = @value")
{
Connection = connection();
};
command.Parameters.AddWithValue("value", textbox1.text);
var dataReader = command.ExecuteReader();
将用户输入发送到数据库的正确方法是使用参数。
IN
运算符经常让没有经验的开发人员感到困惑,因为他们中的许多人试图将它与包含逗号分隔值的单个参数一起使用,并期望它得到 return 结果。然而,这是一个错误,因为 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
}
}
}