vb.net - 使用 TableAdapter 获取新插入行的 Key
问题描述
我正在使用 TableAdapter 将新行插入表中。问题是如何从新插入行的表中获取密钥?我搜索了一下,找到了几个解决方案:
- 使用 Max() - 这被广泛认为是一个糟糕的主意。
- 将 SELECT SCOPE_IDENTITY() 添加到查询中。当我这样做时,我在 SqlBuilder 中得到错误。当我尝试这个解决方案时,我得到:
必须声明标量变量 @FileName FileName 是我查询中的第一个字段:
INSERT INTO FileTable
(FileName, DirectoryName, FullPath, Extension, ToolNumber)
VALUES (@FileName,@DirectoryName,@FullPath,@Extension,@ToolNumber);
SELECT SCOPE_IDENTITY();
我的 VB.Net 代码:
Dim fileRow As ToolsDataSet.FileTableRow
fileRow = ToolsDataSet.FileTable.NewRow()
With fileRow
.FileName = "Test13456789"
End With
ToolsDataSet.FileTable.Rows.Add(fileRow)
FileTableTableAdapter.Update(fileRow)
这似乎是一种普遍的需求。
我如何获得那个钥匙?
解决方案
使用受限于单个表(即SELECT * FROM FileTable
:)的 Typed DataTable,Typed DataTable 能够IDENTITY COLUMN
在插入发生后注意到并填充它,从而使您可以在代码中访问它。
MSSql 测试表
CREATE TABLE [dbo].[Insert_Test](
[Id] [int] IDENTITY(1,1) NOT NULL,
[aString] [varchar](50) NULL,
[aNumber] [int] NULL,
[aBit] [bit] NULL,
[aDate] [datetime] NULL,
[aFloat] [float] NULL,
[aImage] [varbinary](2048) NULL,
CONSTRAINT [PK_Insert_Test] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
VB.Net 测试方法
<TestMethod()>
Public Sub TestAddRowWithDataAdapter()
Dim connectionString As String = "Server=.;Database=JVTest;Trusted_Connection=True;"
Using conn As New SqlConnection(connectionString)
conn.Open()
Dim dataAdapter As New JVTestDataSetTableAdapters.Insert_TestTableAdapter()
Dim dt As New JVTestDataSet.Insert_TestDataTable
dataAdapter.Fill(dt)
Debug.Print(dt.Rows.Count)
Dim newRow As JVTestDataSet.Insert_TestRow
newRow = dt.NewInsert_TestRow()
dt.Rows.Add(newRow)
newRow("aString") = "abc"
newRow("aNumber") = 123
newRow("aDate") = DateTime.Now
Dim rowsInserted As Integer = dataAdapter.Update(newRow)
Dim rowId As Integer = newRow.Id
End Using
End Sub
当下面的行,执行它返回1,对应于被添加的一行
Dim rowsInserted As Integer = dataAdapter.Update(newRow)
当下面的行执行时,该.Id
列包含新行 ID
Dim rowId As Integer = newRow.Id
推荐阅读
- java - 关于 String 和返回对象的基本类问题
- google-maps - Flutter 谷歌地图插件不工作,不显示谷歌地图
- html - 三个文本正文未与行内块对齐
- django - Azure Docker Django sqlite3 未部署
- 3d - 如何在我们自己的相机-LiDAR 设置中使用 KITTI 3D 对象检测方法,我们只有一个校准集?
- javascript - 从对象中删除空对象、数组、字符串或整数
- flutter - 使用身份验证中的用户 ID 在流构建器中显示文本
- java - 带有对象列表的多个列表
- c# - C#中的Excel IsError等效函数
- node.js - 如何在 express 中创建自定义中间件?