感謝Tim Schmelter。在他發佈的鏈接中,參考了Beth Massi博客上的一篇文章,並對該解決方案進行了全面演練。它爲我工作。
http://blogs.msdn.com/bethmassi/archive/2009/05/14/using-tableadapters-to-insert-related-data-into-an-ms-access-database.aspx
的基本步驟是:
1)添加RowUpdated事件處理程序中的強類型表適配器上。此事件處理程序向數據庫發出一個新的OleDBCommand以檢索@@ Identity,然後將該整數分配給表的成員列。
public void _adapter_RowUpdated(dynamic sender, System.Data.OleDb.OleDbRowUpdatedEventArgs e)
{
HMUI.Classes.AccessIDHelper.SetPrimaryKey(this.Connection, e);
}
public static void SetPrimaryKey(OleDbConnection trans, OleDbRowUpdatedEventArgs e)
{
if (e.Status == System.Data.UpdateStatus.Continue && e.StatementType == System.Data.StatementType.Insert)
{
if (pk != null)
{
OleDbCommand cmdGetIdentity = new OleDbCommand("SELECT @@IDENTITY", trans);
// Execute the post-update query to fetch new @@Identity
e.Row.Table.Columns[pk(0)] = Convert.ToInt32(cmdGetIdentity.ExecuteScalar());
e.Row.AcceptChanges();
}
}
}
2)在使用的數據集和表適配器附上功能在步驟1到表適配器的內部數據適配器上的RowUpdated事件的形式的構造。
// Event to handle inserted records and retrieve the primary key ID
m_daDataSources.Adapter.RowUpdated += new System.Data.OleDb.OleDbRowUpdatedEventHandler(m_daDataSources._adapter_RowUpdated);
如果列是標識列,您可以在插入的行中找到新ID。 – 2014-11-21 21:20:48
謝謝。哪個對象維護插入行的列表? – user2723146 2014-11-21 21:22:42