我有一些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)
在数据库中,有一个主键,用于识别行。找到我刚运行此代码时插入的行的主键的最有效方法是什么?
答案 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)
你需要告诉你的表的表适配器刷新 更新/插入操作后的数据表。 这就是你可以做到的。
打开 TableAdapter - >的属性默认选择查询 - > Advnaced选项。并选中刷新数据表选项。立即保存适配器。现在,当您在表适配器上调用update时,数据表将在更新/插入操作后更新[刷新],并将反映数据库表中的最新值。 如果主键或任何coloumn设置为自动递增,则数据表将在最近更新后显示最新值。
现在您可以将更新称为TableAdapterObj.Update(ds.dataTable);
从DataTable(ds.dataTable)颜色中读取最新值,并在更新/插入之前将相应的值分配给子表。这将完全按照您的方式工作。