С Typed DataTable, который ограничен одной таблицей (т. Е. SELECT * FROM FileTable
), 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