Ungültige Parameterbindung –: Ungültiger Parametername bei der Verwendung von Masseneinfügungen mit SSIS und C# in OraclC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Ungültige Parameterbindung –: Ungültiger Parametername bei der Verwendung von Masseneinfügungen mit SSIS und C# in Oracl

Post by Anonymous »

Ich verwende eine C#-Skriptkomponente mit SSIS-Datflow, um Zeilen in Stapeln einzufügen. Dies ist der Code, den ich verwende, aber ich erhalte diese Fehlermeldung:

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();
}
}
Ich habe versucht, das „:“ in den Oracle-Parametern zu entfernen und erneut auszuführen. Ich habe immer noch das gleiche Problem. Ich habe auch versucht, einen Haltepunkt in die Methode „Bulk Insert“ für diese Anweisung cmd.ExecuteNonQuery(); einzufügen, und es wird die gleiche Fehlermeldung und keine Details angezeigt:

Parametername: ParameterName'

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post