C# 如何将数组传递给条件中的OracleParameter?
以下是我尝试执行sql命令的方式: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
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();
}