我一直在做以下事情来用我的sql查询传递参数:
var retval = context.MyObject.SqlQuery(sql.ToString(),
new SqlParameter("@ProductId", productId),
new SqlParameter("@CustomerId", customerId)).ToList();
我遇到了一个场景,即@CustomerId并不总是在我的 sql 字符串中使用。这意味着我使用 if 语句来添加(其中 p.CustomerId = @CustomerId)或将其排除在外。
我意识到我现在无法将参数直接传递给 SqlQuery 函数。相反,我必须创建一个参数的对象列表,然后将其传入:
SqlParameter param1 = new SqlParameter("@ProductId", productId);
SqlParameter param2 = new SqlParameter("@CustomerId", customerId);
object[] parameters = new object[] { param1, param2 };
如何做到这一点,以便我可以使用 if 语句将 CustomerId 参数添加到我的参数数组中?
您可以将查询编辑为此
SELECT * FROM Product p
WHERE
p.ProductId = @ProductId
AND (@CustomerId IS NULL OR p.CustomerId = @CustomerId)
然后,如果不使用它,则将DBNull.Value
传递给@CustomerId
您可以尝试改用 sql 命令,因为它允许使用参数集合。但这可能需要您稍微更改代码结构。
int a = 1;
SqlCommand sql = new SqlCommand();
sql.CommandText = "SELECT * FROm somwhere";
List<SqlParameter> lstParams = new List<SqlParameter>();
if (a == 1)
{`enter code here`
SqlParameter sqlParam1 = new SqlParameter();
lstParams.Add(sqlParam1);
}
else if (a == 2)
{
SqlParameter sqlParam2 = new SqlParameter();
lstParams.Add(sqlParam2);
}
sql.Parameters.AddRange(lstParams.ToArray());
sql.BeginExecuteReader();