【问题标题】:Output doesn't work properly when i try to get his value on vb当我尝试在 vb 上获取他的值时,输出无法正常工作
【发布时间】: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


【解决方案1】:

SET NOCOUNT ON; 添加到AS 之后的proc 开头并删除PRINT。在 VB.NET 中,您应该使用 SqlClient 而不是 ADODB。

这非常适合我 :D 感谢 Dan Guzman

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多