【问题标题】:Why does ODBC C# return empty string while using OUT parameter in Stored Procedure in MySQL?为什么 ODBC C# 在 MySQL 的存储过程中使用 OUT 参数时返回空字符串?
【发布时间】:2017-01-14 05:40:04
【问题描述】:

我在 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() 一起使用。

【问题讨论】:

  • 您需要使用 RETURN 或 SELECT test1,test2
  • @Shannon 我认为 MySQL 不允许返回。如果我使用 SELECT test1, test2 那么我需要一个 OUT 参数吗?
  • 不——在 MySQL 中返回很好:techonthenet.com/mysql/loops/return.php
  • 不——在这种情况下你不需要输出参数。
  • 语法上和SELECT AS一样

标签: c# mysql stored-procedures odbc


【解决方案1】:

在 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
    }
}

【讨论】:

  • 谢谢,我不知道GetStringGetInt32 方法。如果我必须返回一个结果集以及两个输出变量,我是否必须 SELECTtest1test2 和结果集进行完全外连接?
  • 是的,您可以添加更多列 :) ,或者使用带有连接的完整选择等。
猜你喜欢
  • 2020-01-09
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多