为什么在 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# 代码中字符串 test1
和 test2
的值将作为空字符串返回。如何获取我在存储过程中设置的值?
我也试过 ExecuteNonQuery()
但结果相同。我知道我正在连接到数据库,因为我可以将 SELECT
和 INSERT
与 ExecuteReader()
一起使用。
在 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
}
}
我在 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# 代码中字符串 test1
和 test2
的值将作为空字符串返回。如何获取我在存储过程中设置的值?
我也试过 ExecuteNonQuery()
但结果相同。我知道我正在连接到数据库,因为我可以将 SELECT
和 INSERT
与 ExecuteReader()
一起使用。
在 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
}
}