【发布时间】:2020-10-03 11:59:37
【问题描述】:
这是我的第一个问题
alter proc InsertarVentas
@ban int output
as
declare @fecha date
set @fecha = GETDATE()
begin
insert into Ventas (tipoven, fecha)
values ('contado', @fecha)
insert into BANPAC.dbo.Ventas (tipoven, fecha)
values ('contado', @fecha)
select @ban = scope_identity()
print (@ban)
end
我正在尝试使用这个存储过程来获取最后插入的 id 的值,但是它不起作用
这是来自 vb 的代码:
Sub InsertarNuevaVenta()
comando = New ADODB.Command
With comando
.CommandText = "InsertarVentas"
.CommandType = CommandType.StoredProcedure
.Parameters.Append(.CreateParameter("0", ADODB.DataTypeEnum.adVarChar, ADODB.ParameterDirectionEnum.adParamInput, 1, "H"))
.Parameters.Append(.CreateParameter("1", ADODB.DataTypeEnum.adInteger, ADODB.ParameterDirectionEnum.adParamOutput,, 0))
.ActiveConnection = Conexion_vta
.Execute()
ban.Value = .Parameters(1).Value
MessageBox.Show(ban.Value.ToString)
End With
Vta_txt_clave_venta.Text = ban.Value.ToString
End Sub
我做错了什么?
【问题讨论】:
-
将
SET NOCOUNT ON;添加到proc 的开头并删除PRINT。在 VB.NET 中,您应该使用 SqlClient 而不是 ADODB。 -
我知道我应该使用 sqlClient,但老师希望它与 adodb 一起使用,打印它只是为了查看 scope_identity() 是否有效,但在 vb 中无效
-
非常感谢它有效,你救了我的命
-
获得正确最后一个 ID 的另一种方法是 OUTPUT Clause (Transact-SQL)
标签: sql-server vb.net stored-procedures adodb