您的位置:首页 > 数据库 > MySQL

c#调用Mysql带参数的存储过程

2015-09-14 15:42 274 查看

这几天在学习mysql数据库的一些功能,今天在调用存储过程的时候 总是失败,最后发现居然是一个参数名称的问题,我将粘出代码事例及注意事项!

1.首先创建一个带参数的存储过程

①存储过程名称=proc_bookinfo
②存储过程2个参数 一个in 一个out in参数名称=ispay out参数名称=unPaycount

这个存储过程 根据传入的未支付字段名称 输出未支付的商品数量

DELIMITER $$

USE `bookshop`$$

DROP PROCEDURE IF EXISTS `proc_bookinfo`$$

CREATE DEFINER=``@`` PROCEDURE `proc_bookinfo`(IN ispay VARCHAR(10),OUT unPaycount INT)
BEGIN
SELECT COUNT(*) INTO unPaycount FROM tb_bookinfo AS a,tb_shopbook AS b WHERE b.ispay=ispay;
END$$

DELIMITER ;


2.C#代码调用该存储过程

①sql语句只需要写存储过程的名称即可

②2个参数的名称和数据类型以及数据长度都要和数据库中定义存储过程的参数完全相同(大小写不影响)

③2个参数的Direction属性赋予对应的类型

④调用ExcuteProc方法执行 即可,输出值就是传入的第二个参数

StringBuilder sql=new StringBuilder();
sql.Append("proc_bookinfo");
MySqlParameter[] parameters = {
new MySqlParameter("@ispay", MySqlDbType.VarChar,10),
new MySqlParameter("@unPaycount", MySqlDbType.Int32,11)
};
parameters[0].Value ="未付款";
parameters[0].Direction = ParameterDirection.Input;
parameters[1].Value = 0 ;
parameters[1].Direction = ParameterDirection.Output;
DbHelperMySQL.ExecuteProc(Convert.ToString(sql), parameters);


3.执行数据库操作的方法
注意:CommandType属性一定赋值为CommandType.StoredProcedure

public static object ExecuteProc(string SQLString, params MySqlParameter[] cmdParms)
{
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
using (MySqlCommand cmd = new MySqlCommand())
{
try
{

PrepareCommand(cmd, connection, null, SQLString, cmdParms);
cmd.CommandType = CommandType.StoredProcedure;
int rows = cmd.ExecuteNonQuery();
Console.WriteLine("返回值为 "+cmdParms[1].Value);
cmd.Parameters.Clear();
return rows;
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
connection.Close();
throw e;
}
}
}
}


以上就是c#调用Mysql带参数的存储过程的一个完整事例!有问题的朋友可以私信我,也希望大家多多提出建议!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: