Неверная привязка параметра: недопустимое имя параметра при использовании массовых вставок с помощью SSIS и C# в Oracle.C#

Место общения программистов C#
Ответить
Anonymous
 Неверная привязка параметра: недопустимое имя параметра при использовании массовых вставок с помощью SSIS и C# в Oracle.

Сообщение Anonymous »

Я использую компонент сценария C# с потоком данных SSIS для пакетной вставки строк. Это код, который я использую, но получаю следующую ошибку:

Неверная привязка параметра

Имя параметра: Имя параметра

Вот методы, которые я использую:

Код: Выделить всё

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();
}
}
Я попытался удалить «:» в параметрах Oracle и выполнить повторно. У меня все еще та же проблема. Я также попытался поставить точку останова в массовой вставке метода в этом операторе cmd.ExecuteNonQuery();, и он показывает то же сообщение об ошибке и без подробностей:

Имя параметра: Имя параметра'


Подробнее здесь: https://stackoverflow.com/questions/797 ... serts-with
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»