Я соединяю C # с Oracle 11g.У меня есть DataTable, который я заполняю с помощью адаптера данных Oracle.
OracleDataAdapter da;
DataTable dt = new DataTable();
da = new OracleDataAdapter("SELECT * FROM Author", con);
da.Fill(dt);
У меня есть несколько текстовых полей, которые привязаны к разным строкам таблицы данных.
txtAuthorID.DataBindings.Add("Text", dt, "AUTHORID");
txtFirstName.DataBindings.Add("Text", dt, "FIRSTNAME");
txtLastName.DataBindings.Add("Text", dt, "LASTNAME");
txtAddress.DataBindings.Add("Text", dt, "ADDRESS");
txtTelephone.DataBindings.Add("Text", dt, "TELEPHONE");
txtEmailAddress.DataBindings.Add("Text", dt, "EMAIL");
Я такжеУ DataGridView под текстовыми полями отображается содержимое DataTable.
dgvAuthor.DataSource = dt;
Теперь, когда я хочу добавить новую строку, я делаю
bm.AddNew();
, где bm определен вForm_Load as
BindingManagerBase bm;
bm = this.BindingContext[dt];
И когда нажимается кнопка сохранения после того, как вся информация введена и проверена, я делаю
this.BindingContext[dt].EndCurrentEdit();
try
{
da.Update(dt);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Однако проблема возникает тогда, когда я обычно ввожу строку вбазу данных (используя SQL Plus), я использую my_pk_sequence.nextval для первичного ключа.Но как мне указать это, когда я добавляю новую строку в этом методе?
Я ловлю это исключение ORA-01400: cannot insert NULL into ("SYSMAN".AUTHOR.AUTHORID")
, что очевидно, потому что ничего не было указано для первичного ключа.Как обойти это?Большое спасибо заранее:)