调用mysql存储过程参数
本文关键字:参数 存储过程 mysql 调用 | 更新日期: 2023-09-27 18:27:39
我在MySQL数据库中为计数目的开发存储过程。当我运行这个时,它会统计表中的所有行。我只想统计今天的参赛作品。并从C#调用我的过程,submittaimestamp
值等于我的表单日期时间选择器值。我应该做什么修改?当我运行这个时,它会给我错误:
过程wartif.allcounter的参数数量不正确;应为0,得到1
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `allcounter`()
BEGIN
SELECT username, COUNT(IF(status='hold',1,null)) 'hold',
COUNT(IF(status='complete',1,null)) 'complete',
COUNT(IF(loantype='tls',1,null)) 'tls',
COUNT(IF(loantype='rtf',1,null)) 'rtf',
COUNT(IF(loantype='ktl',1,null)) 'ktl',
COUNT(IF(loantype='con',1,null)) 'con',
COUNT(IF(status='hold',1,null)) 'hold',
COUNT(IF(status='complete',1,null)) 'complete',
COUNT(IF(status='route',1,null)) 'route',
COUNT(IF(status='route(*)',1,null)) 'route(*)',
COUNT(IF(neworsecond='new',1,null)) 'new',
COUNT(IF(neworsecond='Second',1,null)) 'Second'
FROM loans
WHERE DATE(submittimestamp) = submitdate
group by username;
END
这就是我尝试从我的应用程序调用它的方式
MySqlCommand cmdwaqDatabase = new MySqlCommand("call allcounter('submitdate')", conwaqDatabase);
DateTime dateTimeValue = tdtp.Value;
cmdwaqDatabase.Parameters.AddWithValue("submitdate", dateTimeValue);
您没有为存储过程指定任何参数,因此
WHERE DATE(submittimestamp) = submitdate
^^^^^^^^^^
在函数中未定义(除非您实际上有一个名为submitdate
的字段)。
定义应该更像
CREATE DEFINER=`root`@`localhost` PROCEDURE `allcounter`(IN submitdate DATE)
^^^^^^^^^^^^^^^^^^
由于您没有定义任何参数,因此您得到了一条完全正确的错误消息——函数是用ZERO参数定义的,并且您正试图传入ONE。