Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c mysql连接器varchar输出参数_C#_Mysql_Mysql Connector_Out Parameters - Fatal编程技术网

C# c mysql连接器varchar输出参数

C# c mysql连接器varchar输出参数,c#,mysql,mysql-connector,out-parameters,C#,Mysql,Mysql Connector,Out Parameters,我有一个mysql v5.6.25在windows 8.1存储过程上运行,它执行以下操作: DELIMITER $$ CREATE PROCEDURE `usp_GetData`(IN param1 int, IN param2 datetime, IN param3 datetime, OUT outparam varchar(2054)) BEGIN SELECT things FROM stuff WHERE a = param1 AND b = param2 AND c = pa

我有一个mysql v5.6.25在windows 8.1存储过程上运行,它执行以下操作:

DELIMITER $$
CREATE PROCEDURE `usp_GetData`(IN param1 int, IN param2 datetime, IN param3 datetime, OUT outparam varchar(2054))
BEGIN
    SELECT things FROM stuff WHERE a = param1 AND b = param2 AND c = param3;
    SET outparam = (SELECT GROUP_CONCAT(otherthings) FROM stuff WHERE a = param1 AND b = param2 AND c = param3);

END;
MySql.Data.MySqlClient.MySqlCommand command = new MySqlCommand();
command.CommandText = StoredProcName;
command.CommandType = System.Data.CommandType.StoredProcedure;
MySql.Data.MySqlClient.MySqlParameter outparamobj = new MySqlParameter("outparam",MySqlDbType.VarChar);
outparamobj.Direction = System.Data.ParameterDirection.Output;

command.Parameters.Add(outparamobj);
command.Parameters.AddWithValue("param1", 1);   
command.Parameters.AddWithValue("param2", startdate);
command.Parameters.AddWithValue("param3", enddate);

command.Connection = DBConn; //object set elsewhere but is an open connection.
using (MySql.Data.MySqlClient.MySqlDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        //populate data object  
    }
    //to make out parameter work - ensure the reader is closed.
    if(!reader.IsClosed) reader.Close();
    string outparamvalue = command.Parameters["outparam"].Value.ToString();
}
我通过mysqlconnector使用以下命令从c调用它:

DELIMITER $$
CREATE PROCEDURE `usp_GetData`(IN param1 int, IN param2 datetime, IN param3 datetime, OUT outparam varchar(2054))
BEGIN
    SELECT things FROM stuff WHERE a = param1 AND b = param2 AND c = param3;
    SET outparam = (SELECT GROUP_CONCAT(otherthings) FROM stuff WHERE a = param1 AND b = param2 AND c = param3);

END;
MySql.Data.MySqlClient.MySqlCommand command = new MySqlCommand();
command.CommandText = StoredProcName;
command.CommandType = System.Data.CommandType.StoredProcedure;
MySql.Data.MySqlClient.MySqlParameter outparamobj = new MySqlParameter("outparam",MySqlDbType.VarChar);
outparamobj.Direction = System.Data.ParameterDirection.Output;

command.Parameters.Add(outparamobj);
command.Parameters.AddWithValue("param1", 1);   
command.Parameters.AddWithValue("param2", startdate);
command.Parameters.AddWithValue("param3", enddate);

command.Connection = DBConn; //object set elsewhere but is an open connection.
using (MySql.Data.MySqlClient.MySqlDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        //populate data object  
    }
    //to make out parameter work - ensure the reader is closed.
    if(!reader.IsClosed) reader.Close();
    string outparamvalue = command.Parameters["outparam"].Value.ToString();
}
参数的值在mysqlparameter对象中保持为dbnull,即使在MySQL工作台中调用时返回值。如果我将out参数类型更改为int并返回项目计数,则将成功返回,因此我怀疑我没有正确定义参数的类型,但没有成功


非常感谢任何帮助

也许您应该按照过程中定义的顺序,最后添加输出参数,而不是第一个。感谢您的关注。我一开始试过了,但没用-我在处理排序问题,因为我知道必须先添加一些返回参数。@Neil outparamname的值是多少?这行中的参数不应该是outparam MySql.Data.MySqlClient.MySqlParameter outparamobj=新的MySqlParameteroutparamname,MySqlDbType.VarChar;这不应该是MySql.Data.MySqlClient.MySqlParameter outparamobj=new MySqlParameter outparam,MySqlDbType.VarChar;MySql在Sql Server中声明参数时也支持@symbol。抱歉,我本可以说得更清楚。outparamname是一个值为outparam的字符串变量。将编辑问题。我不确定Mysql是否支持“@”,但对于int类型的参数,它不需要它,对于varchar参数,它不能使用“@”或不使用“@”。