如何获取刚插入到.net中的类型化数据集中的行的主键?

时间:2010-04-21 13:46:40

标签: .net sql vb.net ado.net strongly-typed-dataset

我有一些VB.net代码使用类型化数据集将数据插入我的SQL数据库,如下所示:

  

dim usersTa As New authorizedUsersTableAdapters.Authorized_UsersTableAdapter   usersTa.Connection = New Data.SqlClient.SqlConnection(MY_CONNECTION_STRING)   usersTa.Insert(first_name,last_name)

在数据库中,有一个主键,用于识别行。找到我刚运行此代码时插入的行的主键的最有效方法是什么?

4 个答案:

答案 0 :(得分:3)

我假设您正在Authorized_UsersTableAdapter.Insert()方法中执行某种SQL。

要返回标识符,请使用SCOPE_IDENTITY()

示例,如果您的标识符是Int。

Dim conn As SqlConnection = ...
Dim cmd As New SqlCommand(INSERT INTO T (Name) VALUES('Test')" & ChrW(13) & ChrW(10) & "SELECT SCOPE_IDENTITY() As TheId", conn)
Dim tId As Integer = CInt(cmd.ExecuteScalar)

答案 1 :(得分:1)

如果使用存储过程,则可以将值作为存储过程的返回值。

请参阅this SO问题和答案(获取插入行的标识的最佳方法?)处理SQL方面。

答案 2 :(得分:1)

有一个库Kailua - The forgotten methods in the ADO.NET API. ,它为前5个供应商提供了这个和其他元数据。此信息是特定于供应商的。

net.windward.utils.ado.WrCommand中换行连接并使用ExecuteInsert功能。

答案 3 :(得分:0)

  

你需要告诉你的表的表适配器刷新   更新/插入操作后的数据表。   这就是你可以做到的。

  1. 打开 TableAdapter - >的属性默认选择查询 - > Advnaced选项。并选中刷新数据表选项。立即保存适配器。现在,当您在表适配器上调用update时,数据表将在更新/插入操作后更新[刷新],并将反映数据库表中的最新值。 如果主键或任何coloumn设置为自动递增,则数据表将在最近更新后显示最新值。

  2. 现在您可以将更新称为TableAdapterObj.Update(ds.dataTable);

  3. 从DataTable(ds.dataTable)颜色中读取最新值,并在更新/插入之前将相应的值分配给子表。这将完全按照您的方式工作。

  4. alt text http://ruchitsurati.net/files/tds1.png