1

这是我在这里的第一个问题,请原谅我这种呈现风格。

我有一个categories包含以下列的 MySQL 表:

  • c_id(自动递增
  • c_code
  • c_name

这是我想做的;

  • 数据集包含一个表 -categories
  • 向数据集添加一行(新类别)
  • mysqldataadaptor使用'supdate()方法更新数据库
  • 在 datagridview 中查看数据集条目

问题是在我插入新行后,我的数据集的相关行没有显示最后插入的主键(自动生成的主键)。但它显示了价值。

这是我添加新行的代码

var dr = ds.Tables["categories"].NewRow();
    dr["c_code"] = "tst123";
    dr["c_name"] = "123tdt";
ds.Tables["categories"].Rows.Add(dr);

这是我更新数据库的代码

adp.Update(ds.Tables[tempTableName]);

最后这就是我在上面一行之后不久查看数据集的方式

dataGridView1.DataSource = ds.Tables["categories"];

问题:
仅在 gridview 中c_codec_name出现在那里。

如何获取最后插入id数据集?

4

3 回答 3

0

我猜你必须做一个新的 adp.Fill(ds) 来获取 ID。您只提供 c_code 和 c_name。因此,c_code 和 c_name 是网格中唯一填充的列。adp.Update 更新您的数据库,由于显而易见的原因,它不会在更新后重新加载整个数据集。

于 2012-10-30T10:38:16.420 回答
0

您可以使用 DataAdapter 的 RowUpdated 事件来查询最后插入的 ID 并更新当前行:

...
adp.RowUpdated += DataAdapter_RowUpdated; // Add this once to your DataAdapter
adp.Update(ds.Tables[tempTableName]);
...

private void DataAdapter_RowUpdated(object sender, MySqlRowUpdatedEventArgs e)
{
  if (e.StatementType == StatementType.Insert)
  {
     string sql = "select last_insert_id()";
     MySqlCommand cmd = new MySqlCommand(sql, e.Command.Connection);
     e.Row["c_id"] = cmd.ExecuteScalar();
  }
}
于 2021-11-15T10:22:37.053 回答
0

这对我有用:它在 VB 中,但你可以看到发生了什么。

mySQLdataAdapter.Update(myDataSet, table)
mySQLcommand.CommandText = "Select Last_Insert_ID();"
lastInsertID = dc.ExecuteScalar()

即使我正在使用数据集,在 mysql 适配器更新后立即运行此代码也会提供最后插入的 ID。

于 2016-01-15T19:35:29.277 回答