Я использую ODP.NET (Oracle.ManagedDataAccess) для выполнения запроса к базе данных Oracle 12.2.0.1.0 с подключаемой базой данных. Я сталкиваюсь с ошибкой, когда использую OracleDataAdapter сразу после удаления столбца. Ошибка «ORA-01007: переменная отсутствует в списке выбора».
Проблема возникает только когда я:
- Создание и использование OracleDataAdapter (выберите *)
- Удалить столбец из таблицы
- Создание и использование другого OracleAdapter (выберите *)
Это как кэширование столбцов (я использую команду select * для команды). Кто-нибудь знает, выполняет ли драйвер ODP.net какое-то внутреннее кэширование, подобное этому, и могу ли я его очистить?
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
using(var con = new OracleConnection(TestConnectionStrings[DatabaseType.Oracle]))
{
con.Open();
//OracleCommand drop = new OracleCommand("DROP TABLE RaceTable2", con);
//drop.ExecuteNonQuery();
OracleCommand create = new OracleCommand("CREATE TABLE RaceTable2 ( A int NOT NULL, B int NOT NULL, C int NOT NULL, D int NOT NULL, E int NOT NULL)",con);
create.ExecuteNonQuery();
var da = new OracleDataAdapter("select * from RaceTable2",con);
da.Fill(dt1);
OracleCommand dropCol = new OracleCommand("ALTER TABLE RaceTable2 DROP COLUMN E", con);
dropCol.ExecuteNonQuery();
var da2 = new OracleDataAdapter("select * from RaceTable2", con);
da2.Fill(dt2); //crashes on this line
}