我正在将 C# 与 Oracle 11g 连接起来。我有一个使用 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 中定义为
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")
,这很明显,因为没有为主键指定任何内容。如何解决这个问题?提前感谢很多:)