Как исправить ошибку ORA-00923, при попытке получить и использовать таблицы из OracleSQL посредством OleDB, приложение Net.Framework, Windows Forms?
У меня есть четыре таблицы, к которым я обращаюсь, и загоняю их данные в DataGridView. Имена таблиц находятся в словаре, и имя выводимой таблицы определяется нажатием на кнопку с названием.
private string currentTable;
private Dictionary<string, int> numberOfColumns =
new Dictionary<string, int> { {"Departments", 1 },
{"Departments_Employees", 2 },
{"Employees", 5 },
{"Projects", 6 }
};
private void GetAndFillTable(string tableName)
{
int value = -1;
if (numberOfColumns.TryGetValue(tableName, out value))
{
lastIndexTable = value;
currentTable = tableName;
LoadData();
}
else
{
MessageBox.Show($"Таблица {tableName} не найдена", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
//пример смены таблицы
private void ChTableToEmpls_Click_1(object sender, EventArgs e)
{
GetAndFillTable("Employees");
}
OleDbDataAdapter = new OleDbDataAdapter("Select *, 'Delete' AS [Delete] FROM " + currentTable, OleDbConnection);
OleDbCommandBuilder = new OleDbCommandBuilder(OleDbDataAdapter);
OleDbCommandBuilder.GetInsertCommand();
OleDbCommandBuilder.GetUpdateCommand();
OleDbCommandBuilder.GetDeleteCommand();
dataSet = new DataSet();
OleDbDataAdapter.Fill(dataSet, currentTable);
dataGridView1.DataSource = null;
dataGridView1.DataSource = dataSet.Tables[currentTable];
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
DataGridViewLinkCell linkCell = new DataGridViewLinkCell();
dataGridView1[lastIndexTable, i] = linkCell;
}
dataGridView1.Refresh();
dataGridView1.Update();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
При запущенном приложении, при попытке вывести какую-либо таблицу по нажатию кнопки, выбрасывается исключение ORA-00923: FROM Keyword not found Where Expected
Подобный код до этого использовался с MS SQL Server.
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Потому что, SQL диалекты SQL Server и Oracle отличаются. Следует проверять работоспособность запросов в любом инструменте для отладки запросов.
В SQL Server будет работать:
Select *, 'Delete' AS [Delete] FROM tab
В Oracle этот же запрос синтаксически неверен, и должен быть изменён:
Select tab.*, 'Delete' AS "Delete" FROM tab