2012-10-23 38 views
1

我使用.NET连接器与MySQL 5.5。当我尝试调用存储过程与“出”的参数,我得到的消息OUT or INOUT argument 2 for routineis not a variable or NEW pseudo-variable in BEFORE triggercmd.ExecuteNonQuery()如何将vb.net的输出参数传递给mysql存储过程?

出了什么问题?

VB代码:

cmd = New MySqlCommand("call testme(@id, @count)", conn) 
cmd.Parameters.AddWithValue("@id", id) ' "id" and "count" are integer variables 
cmd.Parameters.AddWithValue("@count", count) 
cmd.Parameters("@count").Direction = ParameterDirection.Output 
cmd.ExecuteNonQuery() 

MySQL的存储过程:

CREATE PROCEDURE testme(in taxid integer, out imageDescCount integer) 
BEGIN 
set imageDescCount = 23; 
End 

回答

3

请试试这个

在MySQL中创建存储过程像

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `tempdb`.`GetCity` $$ 
CREATE PROCEDURE `tempdb`.`GetCity` 
(IN cid INT, 
OUT cname VarChar(50) 
) 

BEGIN 

    SET cname = (SELECT CityName FROM `City` WHERE CID = cid); 

END $$ 

DELIMITER ; 

和你vb.net代码如

Dim conn As New MySqlConnection() 
conn.ConnectionString = "server=localhost;user=root;database=tempdb;port=3306;password=******;" 
Dim cmd As New MySqlCommand() 

conn.Open() 
cmd.Connection = conn 
cmd.CommandText = "GetCity" 
cmd.CommandType = CommandType.StoredProcedure 
cmd.Parameters.AddWithValue("@cid", "1") 
cmd.Parameters("@cid").Direction = ParameterDirection.Input 

cmd.Parameters.AddWithValue("@cname", MySqlDbType.String) 
cmd.Parameters("@cname").Direction = ParameterDirection.Output 
cmd.ExecuteNonQuery() 

Console.WriteLine("City Name: " & cmd.Parameters("@cname").Value) //Access Your Output Value 

让我知道,如果你有任何问题......

感谢

+0

打破了CMD。即使不更改存储过程和整数参数,类似这样的部件也可以解决问题。 (MySqlDbType.String生成一个错误,但将其更改为一个字符串变量工作正常。)谢谢! – xpda

相关问题