我想在oracle中使用OracleParameter中的“insert all”语句。我必须在一次执行中插入变量行。我怎样才能做到这一点? 这里有一些代码:
string queryInsertRecipients = "INSERT INTO YS_ES_TO(EMAILID,EMAILTO) VALUES(:pEMAILID,:pEMAILTO)";
OracleConnection connection = OracleConnectionOpen("csEmailManagement");
OracleCommand command = new OracleCommand();
OracleParameter[] toParameters = new OracleParameter[2];
for (int i = 0; i < emailMessageList.Length; i++)
{
toParameters[0] = command.Parameters.Add("pEMAILID", OracleDbType.Int32, emailId, ParameterDirection.Input);
toParameters[1] = command.Parameters.Add("pEMAILTO", OracleDbType.Varchar2, emailMessageList[i], ParameterDirection.Input);
command.CommandText = queryInsertRecipients;
command.Connection = connection;
}
答案 0 :(得分:3)
你可能能够通过动态生成参数来实现:
OracleConnection connection = OracleConnectionOpen("csEmailManagement");
OracleCommand command = new OracleCommand();
// Start query string
string query = "INSERT ALL ";
for (int i = 0; i < emailMessageList.Length; i++)
{
query = string.Format("{0} INTO YS_ES_TO(EMAILID,EMAILTO) VALUES (:{1}, :{2})",
query,
"pEMAILID_"+i,
"pEMAILTO_"+i);
command.Parameters.Add("pEMAILID_"+i,
OracleDbType.Int32,
emailId,
ParameterDirection.Input);
command.Parameters.Add("pEMAILTO_"+i,
OracleDbType.Varchar2,
emailMessageList[i],
ParameterDirection.Input);
}
command.CommandText = query;
command.Connection = connection;
请注意以下事项:
底线:我不会为数千行做这件事。我要么在循环中执行它,要么查看其他一些ETL工具,因为我假设源值来自其他一些数据库,使用ETL工具(可能会循环)会比使用它更有效率。一举插入所有数据。
答案 1 :(得分:2)
我考虑使用绑定数组和存储过程。
请查看我在这个问题上的答案,例如:C# 2010, ODP.net, call stored procedure passing array