Однако мне нужно очистить определенные таблицы в базе данных оракула, когда у меня возникают проблемы с запуском следующего кода.
public static void ClearDataTables(IList<string> tableNames)
{
string connectionString = "CONNECTIONSTRING";
using (OracleConnection connection = new OracleConnection())
{
connection.ConnectionString = connectionString;
connection.Open();
foreach (string table in tableNames)
{
OracleCommand command = connection.CreateCommand();
string sql = String.Format("DELETE FROM TOA_REPORTING.{0}", table);
command.CommandText = sql;
command.ExecuteNonQuery();
}
connection.Close();
}
}
Я вызываю этот метод с этим списком
ClearDataTables(new List<string> { "GROUP_DEFINITION", "GROUP_REPORT_EMAIL_LIST", "GROUP_EQUIPMENT_GROUP_STN_XREF"});
Он отлично работает с первыми двумя таблицами, однако на третьей он зависает, и приложение работает вечно...
Забавно, когда я переключаю «GROUP_REPORT_EMAIL_LIST» и «GROUP_EQUIPMENT_GROUP_STN_XREF», приложение работает вечно после того, как оно попадает во второе имя таблицы.
Итак, в заключение, функция работает вечно, когда попадает в «GROUP_EQUIPMENT_GROUP_STN_XREF». Я проверил, что сгенерированный SQL работает, протестировав его на жабе.
Кто-нибудь еще сталкивался с этой проблемой?
РЕДАКТИРОВАТЬ. Первые две таблицы действительно очищаются при запуске.
Решение
string connectionString = "CONNECTIONSTRING";
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
OracleCommand command = connection.CreateCommand();
OracleTransaction trans = connection.BeginTransaction();
command.Transaction = trans;
foreach (string table in tableNames)
{
string sql = String.Format("DELETE FROM TOA_REPORTING.{0}", table);
command.CommandText = sql;
command.ExecuteNonQuery();
}
trans.Commit();
}
TRUNCATE был бы очень хорошим решением, однако у меня нет на это прав!