Неверная привязка параметра
Имя параметра: Имя параметра
Вот методы, которые я использую:
Код: Выделить всё
private OracleConnection conn;
private OracleCommand cmd;
private const int BATCH_SIZE = 50000;
private System.Collections.Generic.List bufferRows;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
List rowValues = new List();
// --- Keep identical order to the SQL ---
rowValues.Add(Row.DERCADDCOLUMNSBATCHID_IsNull ? DBNull.Value : (object)Row.DERCADDCOLUMNSBATCHID);
rowValues.Add(Row.DERCADDCOLUMNSRECDID_IsNull ? DBNull.Value : (object)Row.DERCADDCOLUMNSRECDID);
rowValues.Add(Row.DERCADDCOLUMNSCREADATE_IsNull ? DBNull.Value : (object)Row.DERCADDCOLUMNSCREADATE);
bufferRows.Add(rowValues.ToArray());
if (bufferRows.Count >= BATCH_SIZE)
BulkInsert();
}
public override void PreExecute()
{
base.PreExecute();
bufferRows = new System.Collections.Generic.List(BATCH_SIZE);
string connectionString = "User Id=userid;Password=xxxx;Data Source=xxxx;";
conn = new OracleConnection(connectionString);
conn.Open();
StringBuilder insertSql = new StringBuilder();
insertSql.Append("INSERT INTO STG.tablename(");
insertSql.Append("BATCH_ID, RECD_ID, CREA_DATE)");
insertSql.Append("VALUES (");
insertSql.Append(":pBATCH_ID, :pRECD_ID, :pCREA_DATE)");
cmd = new OracleCommand(insertSql.ToString(), conn);
cmd.BindByName = true;
cmd.ArrayBindCount = BATCH_SIZE;
cmd.Parameters.Add(":pBATCH_ID, OracleDbType.Varchar2, ParameterDirection.Input);
cmd.Parameters.Add(":pRECD_ID, OracleDbType.Varchar2, ParameterDirection.Input);
cmd.Parameters.Add(":pCREA_DATE, OracleDbType.TimeStamp, ParameterDirection.Input);
}
private void BulkInsert()
{
if (bufferRows.Count == 0)
return;
try
{
int rowCount = bufferRows.Count;
cmd.ArrayBindCount = rowCount;
for (int i = 0; i < cmd.Parameters.Count; i++)
{
object[] paramValues = new object[rowCount];
for (int j = 0; j < rowCount; j++)
{
object[] row = bufferRows[j];
paramValues[j] = row[i] ?? DBNull.Value;
}
cmd.Parameters[i].Value = paramValues;
}
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
bool cancel;
this.ComponentMetaData.FireError(0, "OracleBulkInsert", ex.Message, "", 0, out cancel);
}
finally
{
bufferRows.Clear();
}
}
Имя параметра: Имя параметра'
Подробнее здесь: https://stackoverflow.com/questions/797 ... bulk-inser
Мобильная версия