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

发布于 2024-08-29 16:24:38 字数 327 浏览 1 评论 0原文

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

将 usersTa 调暗为新的authorizedUsersTableAdapters.Authorized_UsersTableAdapter usersTa.Connection = New Data.SqlClient.SqlConnection(MY_CONNECTION_STRING) usersTa.Insert(名字,姓氏)

在数据库中,有一个主键,我通过它来识别行。当我运行此代码时,找出我刚刚插入的行的主键的最有效方法是什么?

I have some VB.net code that inserts data into my SQL database using a typed dataset as follows:

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

In the database, there is a primary key by which I identify the rows. What is the most efficient way to find out the primary key of the row that I just inserted when I run this code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

悲凉≈ 2024-09-05 16:24:38

我假设您正在 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)

I assume you are executing some kind of SQL in the Authorized_UsersTableAdapter.Insert() method.

In order to return the identifier you use SCOPE_IDENTITY().

Example if your identifier is an 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)
伴梦长久 2024-09-05 16:24:38

如果您使用存储过程,则可以获得该值作为存储过程的返回值。

请参阅SO问题和答案(获得身份的最佳方式插入的行?)处理 SQL 方面的问题。

If you are using stored procedures you can get the value as a return value of the stored procedure.

See this SO question and answers (Best way to get identity of inserted row?) dealing with the SQL side of this.

夜无邪 2024-09-05 16:24:38

有一个库,Kailua - ADO.NET API 中被遗忘的方法。 ,这确实为排名前 5 的供应商提供了此元数据和其他元数据。此信息是供应商特定的。

将您的连接包装在 net.windward.utils.ado.WrCommand 中并使用 ExecuteInsert 函数。

There's a library, Kailua - The forgotten methods in the ADO.NET API. , that does provide this and additional metadata for the top 5 vendors. This info is vendor specific.

Wrap your connection in a net.windward.utils.ado.WrCommand and use the ExecuteInsert function.

花海 2024-09-05 16:24:38

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

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

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

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

替代文本 http://ruchitsurati.net/files/tds1.png

You need to tell your table's table-adapter to refresh the
data-table after update/insert operation.
This is how you can do that.

  1. Open the properties of TableAdapter -> Default Select Query -> Advnaced options. and Check the option of Refresh the data table. Save the adapter now. Now when you call update on table-adapter, the data-table will be updated [refreshed] after the update/insert operation and will reflect the latest values from database table. if the primary-key or any coloumn is set to auto-increment, the data-table will have those latest value post recent update.

  2. Now you can Call the update as TableAdapterObj.Update(ds.dataTable);

  3. Read latest values from the DataTable(ds.dataTable) coloumns and assign respective values into the child table before update/insert. This will work exactly the way you want.

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文