C# 如何将数组传递给条件中的OracleParameter?

C# 如何将数组传递给条件中的OracleParameter?,c#,sql,oracle,C#,Sql,Oracle,以下是我尝试执行sql命令的方式: List<int> idsToDelete = new List<int>() { 1, 2, 3 }; string sqlDel = @"DELETE FROM products WHERE product_id IN (:idsToDelete)"; using (OracleCommand cmdDel = new OracleCommand(sqlDel, connexion)) { cmdDel.Paramete

以下是我尝试执行sql命令的方式:

List<int> idsToDelete = new List<int>() { 1, 2, 3 };

string sqlDel = @"DELETE FROM products WHERE product_id IN (:idsToDelete)";

using (OracleCommand cmdDel = new OracleCommand(sqlDel, connexion))
{
    cmdDel.Parameters.Add("idsToDelete", idsToDelete.ToArray());
    cmdDel.ExecuteNonQuery();
}
有没有合适的方法为IN条件设置多值参数?
我不想格式化命令字符串,因为它必须是可重用的。

不知道这是否是最佳做法,但它应该可以工作:

List<int> idsToDelete = new List<int>() { 1, 2, 3 };

string sqlDel = @"DELETE FROM products WHERE product_id IN (";
sqlDel += string.Join(", ", idsToDelete);
sqlDel += ")";

using (OracleCommand cmdDel = new OracleCommand(sqlDel, connexion))
{
    cmdDel.Parameters.Add("idsToDelete", idsToDelete.ToArray());
    cmdDel.ExecuteNonQuery();
}
List idsToDelete=new List(){1,2,3};
字符串sqlDel=@“从产品中删除,其中产品id位于(”;
sqlDel+=string.Join(“,”,idsToDelete);
sqlDel+=”;
使用(OracleCommand cmdDel=新的OracleCommand(sqlDel,connexion))
{
Add(“idsToDelete”,idsToDelete.ToArray());
cmdDel.ExecuteNonQuery();
}

让我知道它是否有用。

不知道这是否是最佳做法,但它应该有效:

List<int> idsToDelete = new List<int>() { 1, 2, 3 };

string sqlDel = @"DELETE FROM products WHERE product_id IN (";
sqlDel += string.Join(", ", idsToDelete);
sqlDel += ")";

using (OracleCommand cmdDel = new OracleCommand(sqlDel, connexion))
{
    cmdDel.Parameters.Add("idsToDelete", idsToDelete.ToArray());
    cmdDel.ExecuteNonQuery();
}
List idsToDelete=new List(){1,2,3};
字符串sqlDel=@“从产品中删除,其中产品id位于(”;
sqlDel+=string.Join(“,”,idsToDelete);
sqlDel+=”;
使用(OracleCommand cmdDel=新的OracleCommand(sqlDel,connexion))
{
Add(“idsToDelete”,idsToDelete.ToArray());
cmdDel.ExecuteNonQuery();
}
如果有帮助,请告诉我。

试试看

试一试


您可以在

List<int> idsToDelete = new List<int>() { 1, 2, 3 };

string sqlDel = 
  $@"DELETE 
       FROM products 
      WHERE product_id IN ({string.Join(", ", idsToDelete)})";

using (OracleCommand cmdDel = new OracleCommand(sqlDel, connexion))
{
    cmdDel.ExecuteNonQuery();
}

您可以在

List<int> idsToDelete = new List<int>() { 1, 2, 3 };

string sqlDel = 
  $@"DELETE 
       FROM products 
      WHERE product_id IN ({string.Join(", ", idsToDelete)})";

using (OracleCommand cmdDel = new OracleCommand(sqlDel, connexion))
{
    cmdDel.ExecuteNonQuery();
}

是否希望生成的SQL为“…IN(1,2,3)”?
string sqlDel=$@“从产品中删除产品(其中产品id位于({string.Join(“,”,idsToDelete)})”
或者您必须为
idsToDelete
中的每个项目创建一个参数,是否希望生成的SQL为“…in(1,2,3)”?
string sqlDel=$@“从产品中删除,其中产品id位于({string.Join(“,”,idsToDelete)}”
或者您必须为
idsToDelete
string sqlDel = 
  $@"DELETE 
       FROM products 
      WHERE product_id IN ({string.Join(", ", Enumerable.Range(0, idsToDelete).Select(i => $":prm_Del{i}"))})";

using (OracleCommand cmdDel = new OracleCommand(sqlDel, connexion))
{
    for (int i = 0; i < idsToDelete.Count; ++i) {
      //TODO: A better choice is explict parameter creation:
      //   cmdDel.Parameters.Add($":prm_Del{i}", idsToDelete[i], OracleType);  
      cmdDel.Parameters.AddWithValue($":prm_Del{i}", idsToDelete[i]);
    }

    cmdDel.ExecuteNonQuery();
}