C# 调用mysql存储过程

这是一个web api框架下的项目,主要是为了给他人调用。

      public IDictionary<string, IList<v_order_menu>> GetDishes(string date, string windowid, int enjoyid)
        {
            IDictionary<string, IList<v_order_menu>> v_order_menu = new Dictionary<string, IList<v_order_menu>>();

            StringBuilder sql = new StringBuilder();
            sql.Append("proc_GetCurrentDishesByWindow");
            MySqlParameter[] parameters =
            {
                new MySqlParameter("@windowNumber",MySqlDbType.VarChar,8),
                new MySqlParameter("@enjoyid",MySqlDbType.Int32),
                new MySqlParameter("@mydate",MySqlDbType.DateTime)
            };
            parameters[0].Value = windowid;
            parameters[1].Value = enjoyid;
            parameters[2].Value = date;
            parameters[0].Direction = ParameterDirection.Input;
            parameters[1].Direction = ParameterDirection.Input;
            parameters[2].Direction = ParameterDirection.Input;

            DataSet ds = DbHelperMySQL.GetStoreProcedure(Convert.ToString(sql),parameters);
            IList<v_order_menu> order_menu = DbHelperMySQL.DataSetToIList<v_order_menu>(ds, "v_order_menu");
            v_order_menu.Add("data", order_menu);
            return v_order_menu;


        }

这里是调用方法,接受三个参数,返回一个Dictrionnary类型的数据
     public static DataSet GetStoreProcedure(string SQLString, params MySqlParameter[] cmdParms)
        {
            using (MySqlConnection connection = new MySqlConnection(Conn))
            {
                using (MySqlCommand cmd = new MySqlCommand())
                {
                   
                        PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                        cmd.CommandType = CommandType.StoredProcedure;
                        using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
                        {
                            DataSet ds = new DataSet();
                            try
                            {
                                da.Fill(ds, SQLString);
                                cmd.Parameters.Clear();
                            }
                            catch (MySql.Data.MySqlClient.MySqlException ex)
                            {
                                throw new Exception(ex.Message);
                            }
                            return ds;
                        }
                }
            }
        }


      private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText, MySqlParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            if (trans != null)
                cmd.Transaction = trans;
            cmd.CommandType = CommandType.Text;//cmdType;
            if (cmdParms != null)
            {




                foreach (MySqlParameter parameter in cmdParms)
                {
                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value == null))
                    {
                        parameter.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(parameter);
                }
            }
        }


这是数据库操作类 




这里我犯的错误,在传参时 new MySqlParameter("@windowNumber",MySqlDbType.VarChar,8),   这个@windowNumber 不能有空格

不然就会这样

 

 "ExceptionMessage": "Parameter 'windowNumber' not found in the collection.",


百思不得其解 希望大家不要犯我这个错误

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值