2015-01-19 2 views
0

У меня есть требование, когда я должен выполнять массовое обновление записей в Oracle с помощью C#. Я пытаюсь достичь этого, передав массив идентификаторов записей, которые нужно обновить до oracle, но код не работает.Oracle: массовое обновление записей из C#

Последний код, который я использовал IS-

List<Int64> listTransId = new List<Int64>(); 
while (reader.Read()) 
{ 
    listTransId.Add(Convert.ToInt64(reader["TOLL_TX_SEQ_NUM"])); 
} 

Int64[] arrTOLL_TX_SEQ_NUM = new Int64[listTransId.Count]; 
arrTOLL_TX_SEQ_NUM = listTransId.ToArray(); 

OracleTransaction txn = connection.BeginTransaction(IsolationLevel.ReadCommitted); 
OracleCommand updateCmd = new OracleCommand(@" BEGIN UPDATE TOLL_TRANSACTION SET CCH_EXPORT_DATETIME = SYSDATE WHERE TOLL_TX_SEQ_NUM = :TOLL_TX_SEQ_NUM; END;"); 
updateCmd.CommandType = CommandType.Text; 
updateCmd.Connection = connection; 
//update Cmd.BindByName = true; 
update Cmd.ArrayBindCount = arrTOLL_TX_SEQ_NUM.Length; 

OracleParameter TOLL_TX_SEQ_NUM = new OracleParameter("TOLL_TX_SEQ_NUM", OracleDbType.Int64); 
TOLL_TX_SEQ_NUM.Direction = ParameterDirection.Input; 
TOLL_TX_SEQ_NUM.CollectionType = OracleCollectionType.PLSQLAssociativeArray; 
TOLL_TX_SEQ_NUM.Value = arrTOLL_TX_SEQ_NUM; 
TOLL_TX_SEQ_NUM.Size = arrTOLL_TX_SEQ_NUM.Length; 

updateCmd.Parameters.Add(TOLL_TX_SEQ_NUM); 
Console.WriteLine("Connection state - " + connection.State); 
updateCmd.ExecuteNonQuery(); 
txn.Commit(); 

connection.Close(); 
+2

Можете ли вы уточнить, что не работает? Сообщения об ошибках? – Dawnkeeper

+0

Я думаю, привязка массива для SQL DML (INSERT, UPDATE, DELETE). Вы пытаетесь привязать массив к коду блока PL/SQL. Попробуйте удалить BEGIN и END и оставить команду UPDATE в команде. –

+0

@ KimBergHansen, я не думаю, что это проблема. В моем приложении я использую массовые параметры десятков раз при вызове процедуры PL/SQL –

ответ

Смежные вопросы