【问题标题】:Call stored procedure with an output parameter using ExecuteDataset使用 ExecuteDataset 调用带有输出参数的存储过程
【发布时间】:2018-04-29 01:56:36
【问题描述】:

我需要从 VB.NET 应用程序调用 MySQL (5.7) 数据库中的存储过程。所述过程最后会生成一个SELECT 语句,我需要在我的应用程序中将其检索为DataSet。以前它工作正常,但是我在存储过程中添加了一个输出参数,当我调用它时出现以下错误:

{"PROCEDURE my_database.SP_MY_PROCEDURE 的参数数量不正确;预期为 3,得到 2"}

这是我当前的 VB.NET 代码:

Public Shared Function CallStoredProcedure(ByVal stringParam As String,
                                           ByVal intParam As Integer) As DataSet
    Try
        Dim ds As New DataSet

        Dim params As New List(Of MySqlParameter)
        Dim arrayParams() As MySqlParameter

        params.Add(New MySqlParameter("@param1", stringParam))
        params.Add(New MySqlParameter("@param2", intParam))

        arrayParams = params.ToArray()

        ds = MySqlHelper.ExecuteDataset(connString,
                                        "CALL SP_MY_PROCEDURE(@param1, @param2);",
                                        arrayParams)

        Return ds
    Catch objException As Exception
        Return Nothing
    End Try
End Function

我尝试在字符串中的CALL 语句中添加第三个参数,如下所示:

ds = MySqlHelper.ExecuteDataset(connString,
                                "CALL SP_MY_PROCEDURE(@param1, @param2, param3);",
                                arrayParams)

但这只是返回一个不同的错误:

{"例程 gw_my_database.SP_MY_PROCEDURE 的 OUT 或 INOUT 参数 3 不是 BEFORE 触发器中的变量或 NEW 伪变量"}

我怎样才能做到这一点?也许ExecuteDataset不能与输出参数一起使用;至少我还没有找到例子或任何东西。既然如此,有什么好的选择?

【问题讨论】:

  • @djv 这个问题看起来不像我想要完成的。我已经可以从 MySQL Workbench 调用存储过程了;我的问题是我无法使用 MySqlHelper.ExecuteDataset 从 VB.NET 应用程序调用它。
  • 关键是你需要以某种方式引用 out 参数

标签: mysql vb.net mysql-helper


【解决方案1】:

您绝对可以使用带有输出参数的 ExecuteDataset()。您需要确保将所有必需参数添加到参数列表中,包括输出参数。您需要确认适用的类型和尺寸,并正确设置每个参数的方向。执行 ExecuteDataset() 后,您可以从我们的输出参数中检索值。

我看不到在您的代码中添加第三个参数(或者您可能没有显示该部分),设置方向/类型/大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多