out参数对某些用户不起作用

a8jjtwal  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(459)

我有一个excel工作表,需要对mysql服务器进行多次调用。下面是简化的vba代码,以说明此问题:

Public Function Connect() As ADODB.Connection
    Dim cn As New ADODB.Connection
    With cn
        .ConnectionString = "<Server>"
        .Properties("Initial Catalog").Value = "<DB>"
        .Properties("User ID").Value = "<User>"
        .Properties("Password").Value = "<Password>"
        .CommandTimeout = 1500
    End With
    Set Connect = cn
End Function

Public Sub TestSProc()
    Dim cxn As ADODB.Connection
    Dim cmd As New ADODB.Command
    Dim p1 As ADODB.Parameter
    Dim p2 As ADODB.Parameter
    Set cxn = Connect()
    cxn.Open
    Set cmd.ActiveConnection = cxn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "OutParamTest"
    Set p1 = cmd.CreateParameter(, adBoolean, adParamOutput)
    Set p2 = cmd.CreateParameter(, adVarChar, adParamOutput, 255)
    cmd.Parameters.Append p1
    cmd.Parameters.Append p2
    cmd.Execute
    MsgBox "Result: " & p1.Value & " / " & p2.Value
End Sub

这将执行以下存储过程:

CREATE PROCEDURE `OutParamTest`(
    OUT `isAvailable` BIT,
    OUT `remarks` VARCHAR(255)
)
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
  SET isAvailable = false;
  SET remarks = 'The quick brown fox jumps over the lazy dog.';
END

在我的机器上,对于几乎所有的用户,这会返回:
结果:错误/敏捷的棕色狐狸跳过懒狗。
但对于一个用户,它返回:
结果:正确/
我能在我的机器和用户的机器之间找到的唯一区别是mysql odbc5.3ansi和unicode驱动程序版本。我有版本5.03.02.00,最初这个用户有一个旧版本。我要求他升级,他现在有版本5.03.09.00(比我的更新),但问题仍然存在。
有什么我不知道的吗?是否有某种机器级别的配置变量会导致 OUT 停止工作的参数?或者做 OUT 参数只适用于某些选定的驱动程序版本?
更新:我修改了sp如下:

CREATE PROCEDURE `OutParamTest`(
    OUT `num` INT,
    OUT `remarks` VARCHAR(255)
)
BEGIN
  SET num = 12345;
  SET remarks = 'The quick brown fox jumps over the lazy dog.';
END

并对vba进行了相应的修改。现在在我的机器上它返回:
结果:12345/敏捷的棕色狐狸跳过了懒狗。
在这个用户的机器上,它返回:
结果:232718680/

o3imoua4

o3imoua41#

@wchiquito指出,这很可能与mysql bug#83698有关,尽管我一直无法在其他地方复制精确的行为(由于我公司特殊的网络设置和安全限制),但我同意这很可能是罪魁祸首。
问了这个问题之后,我重新编写了存储过程和相关的电子表格,以便仅通过记录集返回数据。在我看来,它并没有那么“干净”,但至少它可以在所有用户的机器上工作。不过,如果有人能找到 OUT 参数工作(或如果mysql曾经决定修复这个错误),请让我知道。

相关问题