为什么在 MySQL 中的存储过程中使用 OUT 参数时 ODBC C# return 为空字符串?

Why does ODBC C# return empty string while using OUT parameter in Stored Procedure in MySQL?

我在 MySQL 运行 服务器 5.6

中有一个带有两个 OUT 参数 'test1' 和 test2' 的存储过程
    CREATE PROCEDURE `test_procedure`(OUT test1 varchar(20),OUT test2 int)
    BEGIN
     SET test1 = 'testing variable 1';
     SET test2 = 3;
    END

我的电脑上安装了 ODBC 驱动程序 5.3。我正在使用以下代码绑定参数并获取输出值:

   OdbcCommand cmdTest = new OdbcCommand();
   cmdTest.Connection = this.conn;
   cmdTest.CommandText = "{call test.test_procedure (?, ?)}";

   cmdTest.Parameters.Add(@"test1", OdbcType.VarChar, 20).Direction = ParameterDirection.Output;
   cmdTest.Parameters.Add(@"test2", OdbcType.Int).Direction = ParameterDirection.Output;

   cmdTest.CommandType = CommandType.StoredProcedure;
   using (OdbcDataReader returnRead = cmdTest.ExecuteReader())
   {
     while (returnRead.Read())
     {
      //Do something
     }
   }

   string test1 = cmdTest.Parameters[0].Value.ToString();
   string test2 = cmdTest.Parameters[1].Value.ToString();

但是,C# 代码中字符串 test1test2 的值将作为空字符串返回。如何获取我在存储过程中设置的值?

我也试过 ExecuteNonQuery() 但结果相同。我知道我正在连接到数据库,因为我可以将 SELECTINSERTExecuteReader() 一起使用。

在 C# 中使用 MySQL Odbc 使用 OUT 参数存在一些问题,但它对我在过程结束时使用 select 有效:

CREATE PROCEDURE `test_procedure`()
BEGIN
   DECLARE test1 varchar(50);
   DECLARE test2 int;

   SET test1 = 'testing variable 1';
   SET test2 = 3;

   SELECT test1,test2;
END $$

C# 代码:

OdbcCommand cmdTest = new OdbcCommand();
cmdTest.Connection = MyConnection;
cmdTest.CommandText = "call test.test_procedure()";

using (OdbcDataReader returnRead = cmdTest.ExecuteReader())
{
    while (returnRead.Read())
    {
        string test1 = returnRead.GetString(0); //'testing variable 1'
        int test2 = returnRead.GetInt32(1); //3
        //Do something
    }
}