如何获取刚刚插入到 .net 类型化数据集中的行的主键?
我有一些 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我假设您正在
Authorized_UsersTableAdapter.Insert()
方法中执行某种 SQL。为了返回标识符,您可以使用
SCOPE_IDENTITY()
。例如,如果您的标识符是 Int。
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.
如果您使用存储过程,则可以获得该值作为存储过程的返回值。
请参阅此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.
有一个库,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 theExecuteInsert
function.打开TableAdapter -> 的属性默认选择查询->高级选项。并勾选刷新数据表选项。现在保存适配器。现在,当您对表适配器调用更新时,数据表将在更新/插入操作后更新[刷新],并将反映数据库表中的最新值。 如果主键或任何列设置为自动递增,则数据表将具有最近更新后的最新值。
现在您可以将更新调用为 TableAdapterObj.Update(ds .dataTable);
从 DataTable(ds.dataTable) 列中读取最新值,并在更新/插入之前将相应的值分配到子表中。这将完全按照您想要的方式工作。
替代文本 http://ruchitsurati.net/files/tds1.png
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.
Now you can Call the update as TableAdapterObj.Update(ds.dataTable);
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