【发布时间】:2020-10-09 06:03:23
【问题描述】:
使用 VB.NET 和 SQL Server:我有一个表 [Item_List]。当我从 Windows 窗体添加新项目时,我想将记录插入到 Item_List 表中,获取 ItemID 这是一个 IDENTITY,并使用它将相应的记录插入到财务跟踪 @987654325 @表。
我在 T-SQL 查询窗口中直接测试了以下查询并成功:
DECLARE @OutputTbl TABLE (ItemID INT);
INSERT INTO [Item_List] (Item_Name, Vendor, Quantity, Price, Category, Active, Notes, Created)
OUTPUT INSERTED.ItemID INTO @OutputTbl(ItemID)
VALUES ('Test Item', 'Walmart', 42, 4.22, 'Stuff', 1, '', CURRENT_TIMESTAMP);
INSERT INTO Inventory_Transactions (TransDate, Category, Transactee, Amount, Item, Quantity, Description)
SELECT
CURRENT_TIMESTAMP, 'Stuff', 'Walmart', -4.22, ItemID, 42, '';
但是,当我尝试使用 ExecuteNonQuery() 运行时,出现错误
列名“ItemID”无效
我已经使用了上面和下面的确切脚本和参数 - 同样的错误。
Dim sql As String = "DECLARE @OutputTbl TABLE (ItemID INT); " &
"INSERT INTO [Item_List] (Item_Name, Vendor, Quantity, Price, Category, Active, Notes, Created) " &
"OUTPUT INSERTED.ItemID INTO @OutputTbl(ItemID) " &
"VALUES (@ItemName, @Vendor, @Quantity, @Price, @Category, @Active, @Notes, CURRENT_TIMESTAMP); " &
"INSERT INTO Inventory_Transactions (TransDate, Category, Transactee, Amount, Item, Quantity, Description) " &
"SELECT CURRENT_TIMESTAMP, @Category, @Vendor, '-' + @Price, ItemID, @Quantity, @Notes;"
Using conn As New SqlConnection(My.Settings.dbConnectionString)
Dim cmd As New SqlCommand(sql, conn)
If Not IsNothing(params) Then
For Each param In params
cmd.Parameters.Add(param)
Next
End If
If cmd.Connection.State <> ConnectionState.Open Then
cmd.Connection.Open()
Dim rows As Integer = cmd.ExecuteNonQuery()
End Using
如何在 VB 中实现?
【问题讨论】:
-
我建议将其全部放在一个存储过程中。
标签: sql-server vb.net tsql executenonquery