C# SQL参数查询带in

标签 c# sql-server parameters

<分区>

Possible Duplicate:
Parameterizing a SQL IN clause?

我有以下代码:

var myCommand = new SqlCommand();
myCommand.Parameters.Add("@username", SqlDbType.NVarChar);
myCommand.Parameters["@username"].Value = username;
return _dbConnection.ExecuteQuery("Select * from customer where username = @username");

现在我需要为更多值调整查询。我想做这样的事情:

var myCommand = new SqlCommand();
foreach (string username in usernames){
  myCommand.Parameters.Add("@username", SqlDbType.NVarChar);
  myCommand.Parameters["@username"].Value = username;
}
return _dbConnection.ExecuteQuery("Select * from customer where username in @username");

这可能吗?怎么办?

谢谢!

BR 斯特凡

最佳答案

每个参数都需要是唯一的:

var paramNames = new List<string>();
var myCommand = new SqlCommand();
foreach (string username in usernames){
  var paramName = "@user" + paramNames.Count;
  myCommand.Parameters.Add(paramName, SqlDbType.NVarChar);
  myCommand.Parameters[paramName].Value = username;
  paramNames.Add(paramName);
}
return _dbConnection.ExecuteQuery("Select * from customer where username in (" + string.Join(",", paramNames) + ")");

你会得到这样的sql:

SELECT * from customer where username in (@user0, @user1, @user2)

从查询计划缓存的角度来看,它没有多大帮助,但您将获得不易受到 sql 注入(inject)攻击的好处。

关于C# SQL参数查询带in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7837232/

相关文章:

c# - 找到两个四元数之间的旋转差来校准两个坐标系

c# - 从 C 函数编码 LPWSTR *

sql - SUBSTRING 空值替代方案

mysql - MSSQL 中的等效 SQL 查询

javafx - 传递参数 JavaFX FXML

Android以编程方式设置自定义 View 的高度和宽度

c# - Telerik RadComboBox 应用 SelectionBoxTemplate OnLoad?

c# - 将 utc 转换为本地日期时间

java - 使用 JDBC 连接到 SQL Server

Python函数: using a batch file to pass parameters from . txt文件转python函数并执行函数