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



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

将用户输入发送到数据库的正确方法是使用参数。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
}
}
}

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

"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();

相关内容

  • 没有找到相关文章

最新更新