Ungültige Parameterbindung
Parametername: ParameterName
Dies sind die Methoden, die ich verwende:
Code: Select all
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();
}
}
Parametername: ParameterName'
Mobile version